数组作为函数参数

考虑以下代码:

#define MAX_COUNT 4 static int foo(int w[MAX_COUNT]) { int *p = w; if (w) { w[0] = 10; w[1] = 20; w[2] = 30; w[3] = 40; } return 0; } 

它是否可移植,合法地将NULL传递给上面定义的foo()(例如,对于我不需要更改w []的情况)? 鉴于数组的名称是指向其第一个元素的指针,在我看来它应该没问题,但是我觉得我错过了什么?

谢谢 !

应该没问题。 您传递的数组中的元素数量仅仅是forms主义,并不是真正需要的。 w只是指向int的指针。 没有其他运行时或编译检查。

在C中,数组类型函数参数与指针类型相同,因此以下内容相同:

 static int foo(int w[]); static int foo(int* w); 

所以,是的,将NULL传递给此函数是合法的。

假定数组的名称是指向其第一个元素的指针

不完全的。 在大多数情况下 ,数组衰减到指向其初始元素的指针,例外情况是它是sizeof的操作数或者是一元&运算符(运算符的地址)。

C99具有可怕语法的构造(对于您的示例)

 static int foo(int w[static MAX_COUNT]); 

这基本上意味着该函数至少需要MAX_COUNT元素。 用NULL调用这样的函数将被视为错误。

不幸的是,此function尚未广泛实施。 例如gccclang只接受语法但不对信息做任何有用的事情。