c++ - 编写一个函数的原型(prototype),该函数需要一个正好是 16 个整数的数组

标签 c++ c arrays function-prototypes

其中一个面试问题要求我“编写一个 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/

相关文章:

c - 将 strcpy 应用于指向数组的指针 + some_offset

c++ - 将 std::filesystem 头文件添加到我的程序时编译错误

c++ - 字符串 vector 中的元素小写

c - std18 获取页面大小 : implicit declaration of function + nested extern declaration

c - 无法在 c 中的 while 循环期间/之后清除字符串

JavaScript 日期数组

c++ - QT 和 OpenGL 如何正确集成并显示纹理

c++ - 指向基类的指针 vector ,调用虚函数的奇怪行为

c - 使用 gprof 查看 C 程序使用的内存

arrays - 确定是否可以在没有分支的情况下生成整数序列的技术?