Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的“索引”数组函数参数_C_Arrays - Fatal编程技术网

C语言中的“索引”数组函数参数

C语言中的“索引”数组函数参数,c,arrays,C,Arrays,我最近看到一个函数以如下形式编写:void funcint size,int a[size]{…},我对参数a[size]很好奇。起初我认为它可能与数组的索引有关,但运行代码a实际上是一个数组。然后我想它可能与数组的大小有关,所以我尝试传入不同的值,看看它是否会影响数组的长度,但似乎不会,除非它可能与写入数组有关,但感觉不太可能。所以我的问题本质上是,索引在函数参数中做了什么?它是数组大小,但在函数参数声明中被忽略。形式为int A[size]或int A[]的函数参数的处理方式与int*A相同

我最近看到一个函数以如下形式编写:void funcint size,int a[size]{…},我对参数a[size]很好奇。起初我认为它可能与数组的索引有关,但运行代码a实际上是一个数组。然后我想它可能与数组的大小有关,所以我尝试传入不同的值,看看它是否会影响数组的长度,但似乎不会,除非它可能与写入数组有关,但感觉不太可能。所以我的问题本质上是,索引在函数参数中做了什么?

它是数组大小,但在函数参数声明中被忽略。形式为int A[size]或int A[]的函数参数的处理方式与int*A相同,因为数组用作函数参数时会衰减为指针

所以它本质上只是一种自我记录的形式。调用者应该传递一个包含大小元素的数组

请注意,这仅适用于多维数组参数中的第一个维度。如果你有

void func(int width, int height, int a[height][width]) { ... }

使用数组声明的宽度部分,但忽略高度。a是指向int[width]行数组的指针;为第一个维度编制索引时需要宽度。

@DavidRanieri如果它是函数参数,它就不是VLA。@Barmar嗯,它是用作函数参数的VLA,但它是VLA,不是吗?@DavidRanieri不,它只是等价于int*a。大小被忽略。@Barmar你说得对!你说得对。我的参数顺序不对。