程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> printf-為何輸出結果為120,求解釋

printf-為何輸出結果為120,求解釋

編輯:編程綜合問答
為何輸出結果為120,求解釋

struct st_t
{
int status;
short* pdata;
char errstr[32];
};
st_t st[16];
char* p = (char*)(st[2].errstr + 32);
printf("%d", (p - (char*)(st)));

最佳回答:


int--4字節,char--1字節,指針--4字節
一個st_t結構體=40字節。
問題核心在於最後p指針指向了哪裡。
首先,p從st的地址處開始,跳過了兩個結構體的長度,也就是80字節;
然後p從第三個結構體(st[2])首地址開始跳過了int、short*到達了 errstr首地址,又跳過了8字節;
最後p從 errstr首地址開始跳過了32字節到達了st[3]的首地址,這就是p最後的位置,其實就是從st跳躍到了st[3];
一共跳躍了80+8+32=120字節。
那麼最後為什麼輸出120,而不是30或者其他呢?
因為p、(char*)st都是char指針,在求他們之間的距離(減法)時候,你求得是他們之間隔了多少個char,這裡正好就是多少字節(char是一個字節),最後就是120.

寫的比較倉促,有錯誤請指出。

u010298834
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved