在C语言中是否允许使用变量初始化数组字面量?
问题与代码
用户的代码如下:
int fun(int * a, int num){ int sum=0; for (int i=0; i< num; ++i){ sum = sum + a[i]; } return sum; } int main(){ int a = 3, b =2, c = 1 ; int x[3] = {a,b,c}; // 这段代码是否合法?我测试的所有编译器都能正常编译。 int p = fun( (int[3]){a,b,c} , 3); // 我希望实现这样的功能:将字面量传递给函数 return 0; }
问题1:int x[3] = {a,b,c}; 是否合法?
合法。
C99及后续标准放宽了数组初始化的限制,允许使用变量(非常量表达式)作为初始化值。在此之前的C89标准仅支持常量表达式初始化,但目前主流编译器均默认支持C99或更高版本,所以你测试时能正常编译是符合标准的行为。
问题2:能否将(int[3]){a,b,c}传递给函数?
可以,这是C99引入的复合字面量特性。(int[3]){a,b,c}会创建一个临时的int[3]数组对象,当作为函数参数传递时,数组会自动退化为指向首元素的指针,和传递普通数组x的逻辑完全一致。只要编译器支持C99及以上标准,这段代码就能正常编译运行。
内容的提问来源于stack exchange,提问作者Aditya Kurrodu
相关产品推荐
相关产品推荐

