Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 数组作为函数参数_C_Arrays - Fatal编程技术网

C 数组作为函数参数

C 数组作为函数参数,c,arrays,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[]的情况下)?假设数组的名称是指向其第一个元素的指针,那么在我看来它应该是正常的,但

考虑以下代码:

#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[]的情况下)?假设数组的名称是指向其第一个元素的指针,那么在我看来它应该是正常的,但也许我遗漏了什么


谢谢

应该没问题。您传递的数组中的元素数只是一种形式,实际上并不需要
w
只是指向
int
的指针。没有其他运行时或编译检查。

应该可以。您传递的数组中的元素数只是一种形式,实际上并不需要
w
只是指向
int
的指针。没有其他运行时或编译检查。

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

static int foo(int w[]);
static int foo(int* w);
因此,是的,将
NULL
传递给此函数是合法的

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


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

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

static int foo(int w[]);
static int foo(int* w);
因此,是的,将
NULL
传递给此函数是合法的

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


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

C99具有awfull语法的构造(例如您的示例)

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

不幸的是,这个特性还没有得到广泛的实现。e、 g
gcc
clang
只接受语法,但不要对
信息

C99具有awfull语法的构造(以您的示例为例)

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

不幸的是,这个特性还没有得到广泛的实现。e、 g
gcc
clang
只接受语法,但不要对
信息

你面临的问题是什么?程序不是编译还是输出?您面临的问题是什么?是程序未编译还是输出?更准确地说,不可能声明具有数组类型的参数(声明具有数组类型的返回值是非法的)。更准确地说,不可能声明具有数组类型的参数(声明具有数组类型的返回值是非法的)。