我经常使用以下约定来通知客户端代码一个函数需要一个定义大小的数组参数:
/* File foo.h */
int foo (int arg[10]);
我想向客户代码传达的信息是,他们必须提供具有 10 个位置的 int
类型的数组。
我知道这不是很常见,所以我来这里问:我是否遗漏了这个约定的任何副作用?无论如何有害吗?
谢谢!
最佳答案
如果你想坚持得到一个大小为10的数组,你可以使用:
int foo (int (*arg)[10]);
这样做的副作用是:
在函数中,你必须使用:
(*arg)[index]
不仅仅是
arg[index]
调用函数必须使用:
int array[10]; foo(&array);
代替
int array[10]; foo(array);
您不能使用超过 10 个元素的数组。
int array[20]; foo(&array); // Not OK.
您不能使用
malloc
ed 数组。int* array = malloc(sizeof(int)*10); foo(array); // Not OK.
现在选择危害最小的解决方案。
关于c - 函数参数作为具有声明大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28970931/