關於結構體指標以及 和 區別的幾個嘗試

2021-07-24 06:50:10 字數 2370 閱讀 2956

1、指標是否需要分配到空間問題

定義如下結構體以及指標,*change並未指向任何結構體

struct student;

struct student class1[2];

struct student *tem=class1,*max=tem+1,*min=max+1,*change;

經過賦值比較之後,交換max與tem,change可以正常作為中間變數。

if(tem->score > max->score)

change=tem,tem=max,max=change;

if(tem->score < min->score)

change=tem,tem=min,min=change;

總結:交換的只是指標,struct陣列內資料並沒有影響。經查閱知: 箭頭(->):左邊必須為指標;

點號(.):左邊必須為實體。

附上幾個嘗試以供理解:(結構體及指標宣告同上)

1、->的輸入與輸出正常:

scanf("%s %s %d",max->name,max->id,&max->score);

printf("%s %s %d",max->name,max->id,max->core);

2、.的輸入正常,由於max指向class1[1],通過max->輸出也正常:

scanf("%s %s %d",class1[1].name,class1[1].id,&class1[1].score);

printf("%s %s %d",max->name,max->id,max->score);

3、.的輸入輸出正常:

scanf("%s %s %d",class1[1].name,class1[1].id,&class1[1].score);

printf("%s %s %d",class1[1].name,class1[1].id,class1[1].score);

4、 ->的輸入正常,由於max指向class[1],通過class[1].xx輸出也正常:

scanf("%s %s %d",max->name,max->id,&max->score);

printf("%s %s %d",class1[1].name,class1[1].id,class1[1].score);

scanf("%s %s %d",max->name,max->id,&max->score);

printf("%s %s %d",&class1[1]->name,&class1[1]->id,&class1[1]->score);

6、同樣,對於指標max並不能解位址然後使用.,這樣
scanf("%s %s %d",*max.name,*max.id,*max.score);

printf("%s %s %d",class1.name,class1[1].id,class1[1].score);

1-6總結:

箭頭左邊必須為指標,點左邊必須為實體,但是兩者右邊並不受其影響,指向的如果是像id,name陣列名,那都是位址。指向score這種int型別的那麼輸入依然需要用取位址符號&。

輸入時其實就是像某一位址寫入資料,按照資料型別的記憶體空間向後推,所以scanf("%s %s %d",max->name,max->id,&max->score);是可行的。

7、通過指標訪問結構體內部某一陣列的內部成員:

直接通過max->name+3來訪問class1[1].name[3],雖然如下的**可以通過編譯,但是執行過程中會出現未知錯誤:

scanf("%s %s %d",max->name,max->id,max->score);

printf("%s %c",max->name,max->name+3);

如下操作可以直接訪問陣列的內部成員,與上面的區別在於
scanf("%s %s %d",max->name,max->id,&max->score);

printf("%s %c",max->name,*(max->name+3));

7總結:列印%s可以使用指標,因為字串處理是要列印指標指向的位址之後的字元的,二列印%c,%d等需要使用*對指標解位址,再加上以下**說明:

scanf("%s %s %d",max->name,max->id,&max->score);

printf("%s %s",max->name,max->name+3);

C 中類和結構體區別的整理(筆記)

1.在結構體中可以宣告字段,但是宣告欄位的時候是不能給初始值的 其實類中的字段也不能給初始值,編譯器會自動把賦值操作放在建構函式裡 2.建構函式在類中如果不寫會自動新增乙個無參建構函式,構造體中的無參建構函式不能手寫 3.結構體的建構函式必須為每個欄位都賦值 4.構造體可以直接宣告變數 不用new ...

結構體指標和結構體陣列

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 ...