题目如下 #include<stdio.h>struct s {int a,b;} data[2]=10,100,20,200}; main() { struct s p=da...

题目如下 #include<stdio.h>struct s {int a,b;} data[2]=10,100,20,200}; main() { struct s p=data[1]; printf("%d\n",++(p.a)); } 运行后输出结果是(21) 请问为什么,特别是p=data[1]没看懂。谢谢

struct s {int a,b;} data[2]=10,100,20,200}; 定义了一个结构体类型 S,和这个结构体的数组data.。这个data数组有两个结构体data[0]和data[1],data[0]的a是10,b是100;data[1]的a是20,b是200。
struct s p=data[1]; 用结构体类型定义了一个变量p,这时p就是一个S类型的结构体变量了,并且把data[1]赋值给p,这时p.a=20, p.b=200,执行++(p.a) 就是21了。
其实这个程序的书写很不规范,很容易误导初学者,但很多教科书上都喜欢这样,特别是国内的教科书,像下面这样 应该分开定义才更容易理解
struct s {int a; int b;}
struct s data[2]={10,100,20,200};
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-15
struct s {int a,b;} data[2]={10,100,20,200};
定义了一个数组,data[1]中的a未20b为200
然后p=a[1],把a[1]的值赋给p追问

为什么是把20赋给了a而不是把10赋给a的。data[2]={10,100,20,200}是不是把10赋给a,100赋给b.谢谢

追答

data[2]={10,100,20,200}
结果如下(按照顺序赋值的):
data[0].a=10
data[0].b=100
data[1].a=20
data[1].b=200

相似回答