指標和結構體

2021-09-30 12:02:07 字數 1062 閱讀 8722

現在只討論自引用結構體,也就是結構成員的資料型別也是該結構的資料型別。

#include#includeint main();

struct student st = ,,};

struct student *ptr = ;

//printf("st=%x\n",st);

//printf("st+1=%x\n",st+1);

//printf("st+2=%x\n",st+2);

//printf("*ptr=%x\n",*ptr);

printf("%s\n",(++(*ptr)->next)->name);

//printf("*ptr=%x\n",*ptr);

printf("%d\n",(*ptr)->next->score); //這裡是我一開始糾結的地方

這個糾結的地方,我一直認為是85  把表示式(*ptr)->next->score等同於st->next->score等同於(st+1)->score

但是它輸出的是92.

發現時因為

(++(*ptr)->next)->name
這個改變了一些內容,一開始並不知道是到底改變了**。

我們把注釋去掉之後,看了下位址

發現*ptr的內容改變,

原因在於一些容易混淆的東西,

->的優先順序大於*

*ptr->name等同於*(ptr->name)

++*ptr->name等同於++(*ptr->name)

所以(++(*ptr)->next)->name等同於((++(*ptr))->next)->name 

這裡就是*ptr內容變化的原因

結構體指標和結構體陣列

struct ha 100 b,c 3 d 結構體指標其實是乙個指標,它儲存的是指向某個結構體的 位址 所以結構體指標陣列儲存的其實是指向一組結構體的 位址 陣列,它本身並不包含結構體的具體內容 沒有被分配記憶體 所以當用到他們時,要麼重定向,比如 d b 讓d指向b,d儲存的是b的位址,這樣就能通...

和結構體 9 3 結構體指標

01指向結構體變數的指標 1 指向結構體物件的指標變數既可以指向結構體變數,也可指向結構體陣列中的元素。2 指標變數的基型別必須與結構體變數的型別相同。3 c語言中允許把 p num用p num來代替,代表乙個箭頭,p num表示p所指向的結構體變數中的num成員。02指向結構體陣列的指標 1 p ...

指標和結構體

struct test 定義乙個名為test的結構體 test pn1 定義結構體變數pn1 test pn2 定義結構體變數pn2 pn2.a 10 通過成員操作符.給結構體變數pn2中的成員a賦值 pn2.b 3 通過成員操作符.給結構體變數pn2中的成員b賦值 test point 定義結構指...