欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > C语言详细笔记--构造数据类型(结构体指针)

C语言详细笔记--构造数据类型(结构体指针)

2024/10/25 17:14:47 来源:https://blog.csdn.net/Jasmine5606/article/details/141824311  浏览:    关键词:C语言详细笔记--构造数据类型(结构体指针)

目录

一、指向结构体变量的指针

二、通过指针访问结构体变量的成员

1.通过“(*指针变量名).成员名”方式访问

2.通过指针变量名->成员名访问

三、指向结构体数组的指针

四、结构体应用举例


一、指向结构体变量的指针

由于结构体变量占一定内存空间,所以可以通过定义结构体指针变量来存储结构体变量的首地址。一般格式如下:

struct         结构体名        *指针变量名

struct stutype stu={1001,"mike",{2003,2,1},90.5},*pstu;
//这个语句定义了一个struct stutype 类型的结构体变量stu 并对其初始化,另外还定义了一个结构体指针变量pstu
pstu=&stu;//指针pstu指向结构体变量stu

 如下图就是将该指针变量与结构体相关联:

二、通过指针访问结构体变量的成员

1.通过“(*指针变量名).成员名”方式访问

例如:

scanf("%d",&(*pstu).stuid);//输入所指向变量成员stuid 的值
printf("%s",(*pstu).name);//输出所指向变量成员name的值
(*pstu).birthday.year=2003;//设置所指向变量的成员Birthday的year 的值

 所以通过指针引用结构体成员的一般格式如下:

(*指针变量名).成员名

注意:结构体成员运算符“.”的优先级高于间接寻址运算符“*”,所以“*指针变量”要用括号括起来

2.通过指针变量名->成员名访问

一般格式:指针变量名->成员名 

说明:“->”称为指向结构体成员运算符,他在C语言中的运算优先级是最高的。

scanf("%d",&pstu->stuid);//输入指向变量的成员stuid的值
printf("%s",pstu->name);//输出指向变量的成员name的值
pstu->biethday.year=2002;//设置指向变量成员birthday的year的值

三、指向结构体数组的指针

和数组一样,结构体数组的数组名也表示数组的首地址。结构体指针可以指向结构体数组,也就是说可以将该数组的首地址赋给此结构体指针变量。

struct stutype stu[3]={{1001,mike,18},{1002,linda,19},{1003,jone,20}};
struct stutype*pstu;
pstu=stu;//使指针变量pstu指向结构体数组stu的第一个元素。

 

指针变量pstu指向结构体数组stu

四、结构体应用举例

 编写一个程序,实现通过键盘输入N个学生的信息(学号、姓名、成绩)要求按照成绩从高到低的顺序输出各个学生的信息。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define N 5
struct stutype {int num;char name[10];int score;
};
int main()
{struct stutype stu[N];int i, j, k;struct stutype temp;printf("please input the imformation of the students:\n");for (i = 0; i < N; i++){scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);}for (i = 0; i < N - 1; i++){k = i;for (j = i + 1; j < N; j++){if (stu[j].score > stu[k].score)k = j;if (k != i){temp = stu[k];stu[k] = stu[i];stu[i] = temp;}}}printf("the order is:\n");for (i = 0; i < N; i++){printf("%d%5s%d\n", stu[i].num, stu[i].name, stu[i].score);}return 0;
}

本期博客到这里就结束啦~~后续将更新共用体的相关内容,如果对你有帮助的话点赞收藏加关注吧!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com