1 回答

TA貢獻1777條經(jīng)驗 獲得超3個贊
分析:
一:
struct ks
{
int a;
int *b;
}s[4], *p;
定義了兩個結(jié)構(gòu)體變量, 分別是數(shù)組s和指針p.
二:
main函數(shù)中的for語句是給數(shù)組變量s賦值. 數(shù)組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];//結(jié)構(gòu)體指針變量p指向了結(jié)構(gòu)體數(shù)組變量s的第一個元素.
p++;//p指向了結(jié)構(gòu)體數(shù)組變量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.
故最后的結(jié)果是: 5,3
- 1 回答
- 0 關(guān)注
- 442 瀏覽
添加回答
舉報