数组作为函数参数

时间:2010-09-09 05:00:24

标签: c arrays

考虑以下代码:

#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 []的情况)?鉴于数组的名称是指向其第一个元素的指针,在我看来它应该没问题,但是我发现我错过了什么?

谢谢!

3 个答案:

答案 0 :(得分:4)

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

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

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

  

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

这基本上意味着该函数至少需要MAX_COUNT 元素。然后将考虑使用NULL调用这样的函数 作为一个错误。

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