1. 程式人生 > >C語言結構體之指標訪問

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型別的表示範圍,如果不是這個原因,興許能夠使用呢。