C語言結構體之指標訪問
《朱老師物聯網大講堂》學習筆記
網站:www.zhulaoshi.org
#include<stdio.h>
#include <string.h>
struct test
{
int a;
int b;
char c;
};
int main( int argc, char *argv[] )
{
struct test t1;
t1.a = 5;
t1.b = 55;
t1.c = '5';
int *p1 = (int *)&t1;
int *p2 = (int *)((int)&t1+4);
char *p3 = (char *)((int)&t1 + 8 );
printf("%d\n",*p1);
printf("%d\n",*p2);
printf("%c\n",*p3);
}
比較疑惑的是
int *p2 = (int *)((int)&t1+4);
char *p3 = (char *)((int)&t1 + 8 );
之前是這樣
int *p2 = (int *)(&t1+4);
char *p3 = (char *)(&t1 + 8 );
讀出的資料不對,改成
int *p2 = (int *)((char)&t1+4);
char *p3 = (char *)((char)&t1 + 8 );
為什麼不對??
&t1是個地址,但是對這個地址進行+1,就代表增加了t1級別,也就是struct test的地址偏移,而我們這裡是希望增加int大小的偏移,故先把他轉換為int型,再加4.
轉換成char型,已經超過了char型別的表示範圍,如果不是這個原因,興許能夠使用呢。