我经常使用以下约定来通知客户端代码函数需要具有已定义大小的数组的参数:
/* File foo.h */
int foo (int arg[10]);
我想要给客户端代码的消息是,必须提供一个类型为int
的数组,其中包含10个位置。
我知道这不常见,所以我来到这里问:我是否遗漏了这项约定的任何副作用?无论如何有害吗?
感谢!
答案 0 :(得分:2)
struct arrayContainerTen{
int data[10];
}
void aFunction(struct arrayContainerTen *pAnArray)
{
size_t size = sizeof(pAnArray->data);
}
main()
{
arrayContainerTen anArray;
aFunction(&anArray);
}
答案 1 :(得分:2)
如果你想坚持获得一个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.
现在选择危害最小的解决方案。
答案 2 :(得分:1)
这样写它没有害处。但请注意,编译器不会强制执行该要求。这样的声明由编译器处理,就像你写的一样。
int foo(int *arg);