c - 为什么我们不能在 C 中多次初始化结构?

标签 c

为什么这在 C 中是非法的?将 p 重新初始化到不同的位置有什么问题?通过单独更改字段值可以达到相同的效果,所以我不明白为什么不能在 p = {1, 2} 的情况下一步完成。

struct posn {
    int x;
    int y;
};

int main() {
    struct posn p = {3, 4};
    p = {1, 2}; //Causes error
    // must do p.x = 1; p.y = 2;
    return 0;
}

最佳答案

这就是指定语言的方式。

为了与 C 的一般设计保持一致,为了允许 p = {1, 2}{1, 2} 必须是一个表达式。但是是什么类型的呢?它可以是 int[2],或者 struct { int a;短裤; },或者很多其他的东西。

在 C99 中,可以使用复合文字,它明确提及类型(从而解决了如何确定类型的问题),括号中的类型名称后跟 {} 括号:

p = (struct posn){1, 2};

关于c - 为什么我们不能在 C 中多次初始化结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797055/

相关文章:

c - 调用整数并使用函数将数字添加到用户输入崩溃的程序

python - 从头开始编码以太网桥

c - 从用户输入日期数据类型

c - 如何使用 Ansi C 打开新的控制台窗口?

c - 使用 libavcodec 的 mpegts 容器中的原始 H264 帧

带缓存的 C 动态规划

c - 如何将值存储到多参数结构中并将 typedef 结构传递给函数?

c - 为什么 c 中的 dest 数组需要这么多空间用于 strcat

c++ - OpenCV 在新图像中旋转、扭曲和平移 ROI

c - 如何用C语言创建操作系统?