C语言中的“索引”数组函数参数
我最近看到一个函数以如下形式编写:void funcint size,int a[size]{…},我对参数a[size]很好奇。起初我认为它可能与数组的索引有关,但运行代码a实际上是一个数组。然后我想它可能与数组的大小有关,所以我尝试传入不同的值,看看它是否会影响数组的长度,但似乎不会,除非它可能与写入数组有关,但感觉不太可能。所以我的问题本质上是,索引在函数参数中做了什么?它是数组大小,但在函数参数声明中被忽略。形式为int A[size]或int A[]的函数参数的处理方式与int*A相同,因为数组用作函数参数时会衰减为指针 所以它本质上只是一种自我记录的形式。调用者应该传递一个包含大小元素的数组 请注意,这仅适用于多维数组参数中的第一个维度。如果你有C语言中的“索引”数组函数参数,c,arrays,C,Arrays,我最近看到一个函数以如下形式编写: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你说得对!你说得对。我的参数顺序不对。