一個指向變量的指針表示的是佔內存中起始位置數組
一個指向結構體的變量的指針表示的是這個結構體變量佔內存中的起始位置,一樣它也能夠指向結構體變量數組函數
定義結構體變量的指針:spa
//假設已有一個結構體名爲Student struct Student *pStruct // 結構體類型 * 指針名;
經過指針來引用結構體中的成員,有三種方式指針
demo:code
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.iNumberorm
2.(*pStruct).iNumberblog
3.pStruct->iNumber內存
後兩種是經過結構體變量指針來引用的結構體變量中的成員,第2種在*pStruct上加上小括號的緣由是由於要提高 」*pStruct「 的運算優先級,由於在默認狀況 . 運算符的優先級是比*運算符的優先級要高的。字符串
我的比較喜歡用"->指向運算符"來引用結構體中的成員get
注意:聲明結構體的位置能夠放在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.熟練掌握用指針來操做結構體變量的兩種方式