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.
寫的比較倉促,有錯誤請指出。