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