C语言 指向结构体变量的指针
一个指向变量的指针表示的是占内存中起始位置
一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组
定义结构体变量的指针:
//假设已有一个结构体名为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.熟练掌握用指针来操作结构体变量的两种方式