struct ks{int a;int *b;}s[4], *p;main (){int n = 1, i;for (i = 0; i < 4; i++){s[i].a = n;s[i].b = &s[i].a;n = n + 2;}p = &s[0];p++;printf ("%d,%d\n", (++p) -> a, (p++) -> a);}
1 回答
慕森王
TA贡献1777条经验 获得超3个赞
分析:
一:
struct ks
{
int a;
int *b;
}s[4], *p;
定义了两个结构体变量, 分别是数组s和指针p.
二:
main函数中的for语句是给数组变量s赋值. 数组s的每个元素的成员指针变量b都指向了它本身的成员变量a.
赋值完后, s[0].a = 1, s[1].a = 3, s[2].a = 5, s[3].a = 7 .
且, s[0].b = &s[0].a, s[1].b = &s[1].a, s[2].b = &s[2].a, s[3].b = &s[3].a
三:
p = &s[0];//结构体指针变量p指向了结构体数组变量s的第一个元素.
p++;//p指向了结构体数组变量s的第二个元素, 即s[1]的首地址.
四:
++p是先做++运算再取p的值, 而p++是先取p的得, 再做++运算.
故对于最后的打印语句:
printf ("%d,%d\n", (++p) -> a, (p++) -> a);
由上述的分析, 这时(++p)指向了s[2]的首地址. 所以(++p) -> a 的值是s[2].a的值, 即为5
而(p++)是指向了s[1]的首地址. 所以(p++) -> a的值是s[1].a的值, 即为3.
故最后的结果是: 5,3
- 1 回答
- 0 关注
- 375 浏览
添加回答
举报
0/150
提交
取消