gpt4 book ai didi

c - C语言语句的求值

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

struct 
{
int a[2], b;
}
arr[] = {[0].a = {1}, [1].a = {2}, [0].b = 1, [1].b = 2};

C语言如何对这一行求值? struct 的一般声明与此声明不同。也可以像 [0].a , [0].b 这样访问 C 中的元素?

最佳答案

第一行是新结构类型的定义:

struct {
int a[2], b;
}

它声明了一个包含两个成员的结构:一个由两个名为 aint 和一个 int b 组成的数组>.

接下来可以分解如下,首先是变量:

arr[]

它定义了一个变量arr,它是一个结构数组。数组的大小未定义,因为变量是通过以下方式初始化的(因此它的大小由此初始化定义):

{ [0].a = ... }

这是一种新的 C(C99,不是很新...)语法,用于初始化结构化数据类型的内容:designated initializer

当你初始化某些东西时,你正在初始化的内容的上下文被定义(具有两个成员的结构数组)。然后符号 [0] 只引用数组的第一个成员(因此数组至少有一个元素),并且因为这个元素是结构化的 [0].a 表示它的成员a,本身就是一个数组。然后这个数组也被 { 1 } 初始化。这里的诀窍是这个数组成员的长度已经由类型定义定义:长度 2,然后 { 1 } 初始化该数组,第一个元素等于 1,第二个元素为 0(整数初始化的默认值)。等等

最后:

{[0].a = {1}, [1].a = {2}, [0].b = 1, [1].b = 2};

arr 初始化为:

  1. 长度为2的数组
  2. 其第一个元素成员a初始化为1,0,其成员b初始化为1
  3. 其第二个元素成员a初始化为2,0,其成员b初始化为2

如果你使用赋值,那么你可以这样写:

struct { ... } arr[2];
arr[0].a[0] = 1;
arr[0].a[1] = 0;
arr[0].b = 1;
arr[1].a[0] = 2;
arr[1].a[1] = 0;
arr[1].b = 2;

其中 [0](例如)表示数组的第一个元素,但需要以表示该数组的表达式作为前缀,因此 arr[0] ...

关于c - C语言语句的求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43423117/

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