C语言 指向结构体变量的指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.熟练掌握用指针来操作结构体变量的两种方式

 

以上是关于C语言 指向结构体变量的指针的主要内容,如果未能解决你的问题,请参考以下文章

C语言结构体指针成员所指向的变量如何访问?

C语言结构体指针详解

c语言:通过指向结构体变量的指针变量输出结构体变量中成员的信息

C语言 NULL赋结构体指针变量

C语言-结构体

C 语言结构体 ( 结构体深拷贝 )