其中一个面试问题要求我“编写一个 C 函数的原型(prototype),该函数需要一个恰好包含 16 个整数的数组”,我想知道它可能是什么?也许是这样的函数声明:
void foo(int a[], int len);
还是别的什么?
如果语言是 C++ 呢?
最佳答案
在 C 中,这需要一个指向 16 个整数数组的指针:
void special_case(int (*array)[16]);
它会被调用:
int array[16];
special_case(&array);
在 C++ 中,您也可以使用对数组的引用,如 Nawaz 所示。的回答。 (题主问的是C,原来标签里只提到了C++。)
使用以下变体的任何版本:
void alternative(int array[16]);
最终等同于:
void alternative(int *array);
实际上可以接受任何大小的数组。
问这个问题 - special_case()
真的可以防止传递不同大小的数组吗?答案是"is"。
void special_case(int (*array)[16]);
void anon(void)
{
int array16[16];
int array18[18];
special_case(&array16);
special_case(&array18);
}
编译器(MacOS X 10.6.6 上的 GCC 4.5.2,碰巧)提示(警告):
$ gcc -c xx.c
xx.c: In function ‘anon’:
xx.c:9:5: warning: passing argument 1 of ‘special_case’ from incompatible pointer type
xx.c:1:6: note: expected ‘int (*)[16]’ but argument is of type ‘int (*)[18]’
$
更改为 GCC 4.2.1 - 由 Apple 提供 - 警告是:
$ /usr/bin/gcc -c xx.c
xx.c: In function ‘anon’:
xx.c:9: warning: passing argument 1 of ‘special_case’ from incompatible pointer type
$
4.5.2中的警告更好,但实质是一样的。
关于c++ - 编写一个函数的原型(prototype),该函数需要一个正好是 16 个整数的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4710454/