编写一个函数的原型,该函数需要一个正好是 16 个整数的数组

新手上路,请多包涵

其中一个面试问题要求我“编写一个 C 函数的原型,该函数需要一个恰好包含 16 个整数的数组”,我想知道它可能是什么?也许像这样的函数声明:

 void foo(int a[], int len);

或者是其他东西?

如果语言是 C++ 呢?

原文由 sriks 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 368
1 个回答

在 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() 真的阻止了不同大小的数组被传递。答案是“是”。

 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中的警告更好,但实质是一样的。

原文由 Jonathan Leffler 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题