亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

能幫我解釋下這段程序的執行結果嗎?

能幫我解釋下這段程序的執行結果嗎?

C
慕的地6264312 2023-04-21 19:15:29
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


查看完整回答
反對 回復 2023-04-23
  • 1 回答
  • 0 關注
  • 430 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號