You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:48:21