gpt4 book ai didi

c - 带大括号的一维和二维数组初始化

转载 作者:太空狗 更新时间:2023-10-29 15:52:51 24 4
gpt4 key购买 nike

以下代码给出了“无效的初始值设定项”错误:

     int a[]=(1,2,3);

但以下编译成功,尽管它认为','是逗号运算符而不是分隔符:

    int a[][2]={(1,2),(3,4)};

那么为什么 () 对一维数组无效而不对二维数组无效?

最佳答案

在第一个例子中:

int a[]=(1,2,3);

初始化器是一个(相当奇怪的)int 类型的表达式。 (它包含两个逗号运算符,并产生值 3。)该对象是一个数组。初始化无效,因为它是类型不匹配。

第二个:

int a[][2]={(1,2),(3,4)};

相当于:

int a[][2] = { 2, 4 };

这是有效的,因为允许在初始化程序中省略嵌套的花括号;元素用于初始化对象的连续元素。第一个和第三个逗号是逗号运算符;第二个是分隔符。

如果初始值设定项只是目标类型的表达式(无论是标量、结构还是 union ),则最外层的花括号可选。例如,你可以这样写:

int x = 42;
int y = { 42 };

对于指定元素值(对于数组、结构或 union 对象)的初始化程序,需要最外面的大括号。

例如:

struct foo {
int x;
int y;
};

struct foo arr[2] = { 1, 2, 3, 4 };

是有效的——但更清楚地写成:

 struct foo arr[2] = { { 1, 2 }, { 3, 4 } };

除了第一个例子无效外,两个都是糟糕的风格。第一个可能是:

int a[] = { 1, 2, 3 };

第二个:

int a[][2] = { 2, 4 };

int a[][2] = {{1, 2}, {3, 4}};

取决于意图。

关于c - 带大括号的一维和二维数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com