#include
struct abc{
int a,b,c;
};
int maint(){
struct abc s[2]={{1,2,3},{4,5,6}};
int t;
t=s[0].b+s[1].a;
printf("%d\n",t);
return 0;
}
输出结果:6
struct abc{
int a,b,c;
};首先定义了abc这个结构体类型,其中中有三个整形变量,
struct abc s[2]={{1,2,3},{4,5,6}};定义一个结构体数组s并赋初值,s有两个元素,第一个元素{1,2,3}分别对应s[0].a s[0].b s[0].c (其中“.”是成员运算符){4,5,6}同理为s[1]各成员的值
t=s[0].b+s[1].a 。即整形变量t的值为2+4=6
第7行就是定义了两个abc结构体对象,同时初始化了。
这种初始化方式能成功的原因是结构体的三个变量在内存中是连续的,所以直接可以当有三个元素的整型数组来处理。
s[0].b就是2,因为初始化的1,2,3就是赋值给s[0]的a,b,c三个成员;同理,s[1].a = 4,因此t就是2+4= 6
第七行不就初始化赋值s[0] a,b,c 是 1,2,3
s[1] a,b,c 是 4,5,6
#include <stdio.h>
// 定义结构体abc, 含有三个整型数据成员
struct abc {
int a, b, c;
};
int maint() {
struct abc s[2] = {{1, 2, 3}, {4, 5, 6}}; // 定义abc结构体数组,数组大小为2,数组及结构体数据成员按初始化列表进行初始化
int t;
t = s[0].b + s[1].a; // 将第一个数组元素中的b(=2) 和第二个数组元素中的a(=4)相加,把结果赋给t
printf("%d\n", t); // 打印t的值
return 0;
}
从第三行开始,首先定义了一个结构体名为abc,里面有三个整形的变量;到第7行,创建了结构体abc(的数组对象),开辟空间并对他们赋值初始化,最后,通过结构体的对象(也就是s[i]数组)访问结构体中三个整形的数据,最后在运行,打印输出。