一個指向變量的指針表示的是占內存中起始位置
一個指向結構體的變量的指針表示的是這個結構體變量占內存中的起始位置,同樣它也可以指向結構體變量數組
定義結構體變量的指針:
//假設已有一個結構體名為Student struct Student *pStruct // 結構體類型 * 指針名;
通過指針來引用結構體中的成員,有三種方式
demo:
1 # include <stdio.h> 2 # include <stdlib.h> 3 /* 4 1.使用->引用結構體成員 5 6 7 */ 8 9 10 int main () 11 { 12 13 struct Student 14 { 15 char cName[20]; 16 int iNumber; 17 char cSex; 18 int iGrade; 19 }student={"Girl",2017,'w',2}; 20 21 struct Student *pStruct; 22 pStruct = &student; //指向student結構體變量 23 printf("-----------the sudent's information----------\n"); 24 printf("Name:%s\n",(*pStruct).cName); 25 printf("Number:%d\n",(*pStruct).iNumber); 26 printf("Sex:%c\n",(*pStruct).cSex); 27 printf("Grade:%d\n",(*pStruct).iGrade); 28 printf("============使用->符號引用結構體成員==============\n"); 29 printf("Name:%s\n",pStruct->cName); 30 printf("Number:%d\n",pStruct->iNumber); 31 printf("Sex:%c\n",pStruct->cSex); 32 printf("iGrade:%d\n",pStruct->iGrade); 33 34 return 0; 35 }
1.student.iNumber
2.(*pStruct).iNumber
3.pStruct->iNumber
后兩種是通過結構體變量指針來引用的結構體變量中的成員,第2種在*pStruct上加上小括號的原因是因為要提升 ”*pStruct“ 的運算優先級,因為在默認情況 . 運算符的優先級是比*運算符的優先級要高的。
個人比較喜歡用"->指向運算符"來引用結構體中的成員
注意:聲明結構體的位置可以放在main函數外,也可以放在main函數里
一些習題例子:
1 # include <stdlib.h> 2 # include <string.h> 3 4 struct Student 5 { 6 char name[30]; 7 int iNumber; 8 char cSex; 9 int iGrade; 10 }student; 11 12 int main () 13 { 14 struct Student *pStruct; 15 pStruct = &student; 16 strcpy(pStruct->name,"瑤瑤"); 17 pStruct->iNumber = 2016; 18 pStruct->cSex='W'; 19 pStruct->iGrade=89; 20 21 printf("------------The student's information---------\n"); 22 printf("Name:%s\n",(*pStruct).name); 23 printf("Number:%d\n",(*pStruct).iNumber); 24 printf("Sex:%c\n",(*pStruct).cSex); 25 printf("Grade:%d\n",(*pStruct).iGrade); 26 27 28 return 0; 29 }
1 # include <stdio.h> 2 # include <stdlib.h> 3 4 5 //創建一個學生結構體 6 struct Student 7 { 8 char Name[30]; 9 char sex; 10 int score; 11 char lovep[30]; 12 }student; 13 14 15 16 int main () 17 18 { 19 struct Student *pStruct; 20 pStruct = &student; 21 printf("Input:====================\n"); 22 printf("Name:"); 23 scanf("%s",&pStruct->Name); 24 getchar(); //在使用%s讀入字符串的時候 需要一個getchar來接受空格符號 這樣才能不影響下次的輸入 25 printf("sex:"); 26 scanf("%c",&pStruct->sex); 27 printf("score:"); 28 scanf("%d",&pStruct->score); 29 printf("love People:"); 30 scanf("%s",&pStruct->lovep); 31 printf("Print:====================\n"); 32 printf("name:%s\nsex:%c\nscore:%d\nLovePeople:%s\n",pStruct->Name,pStruct->sex,pStruct->score,pStruct->lovep); 33 34 return 0; 35 }
因為比較簡單,所以都沒有寫上注釋,練習的時候有1個點,
1.熟練掌握用指針來操作結構體變量的兩種方式