現在只討論自引用結構體,也就是結構成員的資料型別也是該結構的資料型別。
#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 定義結構指...