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、 ggcc
和clang
只接受语法,但不要对
信息 C99具有awfull语法的构造(以您的示例为例) 这基本上意味着函数至少需要
MAX\u COUNT
元素。然后将考虑使用NULL调用这样的函数
作为一个错误
不幸的是,这个特性还没有得到广泛的实现。e、 ggcc
和clang
只接受语法,但不要对
信息 你面临的问题是什么?程序不是编译还是输出?您面临的问题是什么?是程序未编译还是输出?更准确地说,不可能声明具有数组类型的参数(声明具有数组类型的返回值是非法的)。更准确地说,不可能声明具有数组类型的参数(声明具有数组类型的返回值是非法的)。