结构体的基础知识点

结构体的基础知识点

1.声明结构体:

struct 结构标识符{
数据类型 成员1的名字;
数据类型 成员2的名字;
};
结构模板只是声明了一种数据类型,定义了数据的组成形式,并未声明结构类型的变量

2.声明结构变量

(1).先声明结构类型,再定义结构变量

例如:利用前面已声明的结构类型struct student,定义一个该类型的变量stu;
struct student stu;

(2).在声明结构的同时定义结构变量

struct student {
char ID[16];
char name[16];
float score;
}stu;

3.初始化结构变量

struct student stu={“202410”,“阮”,‘M’,98};

4.将一个结构作为另一个结构的成员

struct date{
int year;
int month;
int day;
};
struct student{
char ID[16];
char name[16];
char sex;
struct date,birthday;
float score;
};

5.访问结构成员

一般情况:struct student stu;
stu.ID=“20242010”;
如果一个结构的成员又是另一个结构变量,必须以级联的方式访问结构成员
stu.birthday.year=2024;
stu.birthday.month=10;
例题:访问结构成员

#include<stdio.h>
struct date{
	int year;
	int month;
	int day;
};
struct student{
	char ID[16];
	char name[16];
	char sex;
	struct date birthday;
	float score;
};
int main()
{
	struct student stu={"2010001","令狐冲",'M',{1990,5,23},98};
	 
	
	printf("学号:%s\n",stu.ID);
	printf("姓名:%s\n",stu.name);
	printf("性别:%c\n",stu.sex);
	printf("生日:%d年%d月%d日\n",stu.birthday.year,stu.birthday.month,stu.birthday.day);
	printf("成绩:%4.1f\n",stu.score);
}

6.使用typedef定义数据类型

关键字typedef用于为系统固有的或用户定义的数据类型定义一个别名

struct pts{
int x;
int y;
int z;
}
声明:
现在用关键字typedef为这个结构定义一个更方便引用的名字Point,语句如下:
tyoedef struct pts Point;
1.这条语句指定名称Point是struct pts的同义字。声明该结构变量是,可以这样写:
Point star_pt;
Point end_pt;
这里声明了两个结构变量
2.typedef struct pts{
int x;
int y;
int z;
}Point;
不要把这条声明和基本的结构声明弄混。这里的Pont不是结构变量的名称,而是类型名称,如果想要使用要声明变量

例题:输入n个学生信息,输出最高分的学生信息

#include<stdio.h>
/*读入学生的一些信息,然后找出成绩最高的学生的所有信息*/ 
typedef struct student//关键字typedef用于为系统固有的或者用户自定义的数据类型定义一个别名 
{
	char ID[16];
	char name[16];
	char sex;
	float score;
}STUDENT;//这个不是结构体的名字
int main()
{
	STUDENT stu,first;
	int n,i;
	printf("请输入学生人数:");
	scanf("%d",&n);
	first.score=-1;//把临时最优值的成绩初始化
	printf("请输入%d个学生的信息(学号 姓名 性别 成绩):\n",n);
	for(i=1;i<=n;i++)
	{
		scanf("%s",stu.ID);
		scanf("%s",stu.name);
		scanf("%*c%c",&stu.sex);//把空格筛掉,不要读入空格,用抑制符抑制掉 
		scanf("%f",&stu.score);
		if(stu.score>first.score)
		first=stu;//同类型结构变量可以直接赋值
		 
	 } 
	 printf("最高分学生的信息如下:\n");
	 printf("学号:%s\n",first.ID);
	 printf("姓名:%s\n",first.name);
	 printf("性别:%c\n",first.sex);
	 printf("成绩:%4.1f\n",first.score);
	 return 0;
	 
	 	
	 
 } 

7.结构数组

元素为结构类型的数组称为结构数组
声明:STUDENT stu[30];//STUDENT为结构类型,不是变量
可以进行初始化:STUDENT stu[30]={
{“20242010”,"阮“,‘M’,98},
{“20250210”,“宋”,‘M’,22}
};

8.结构指针

STUDENT *p;
指针使用前需要初始化

例如:STUDENT stu={“20240120”,‘邵’,‘M’,18};
STUDENT *p=&stu;

访问形式:
结构指针变量名->成员名;

例如:通过不同方式访问结构成员

#include<stdio.h>
typedef struct student{
	char ID[16];
	char name[16];
	char sex;
	float score;
}STUDENT;
int main()
{
	STUDENT stu={"20010001","令",'M',98};
	STUDENT *p;
	p=&stu;
	//以下三种输出是等价的 
	printf("%s,%s,%c,%.1f\n",stu.ID,stu.name,stu.sex,stu.score);
	printf("%s,%s,%c,%.1f\n",(*p).ID,(*p).name,(*p).sex,(*p).score);
	printf("%s,%s,%c,%.1f\n",p->ID,p->name,p->sex,p->score);
	return 0;
}

9.结构指针作为函数参数

例题:

#include<stdio.h>
struct date{
	int year;
	int month;
	int day;
};
void pts(date *p)
{
	p->year=2024;
	p->month=12;
	p->day=31;
}
int main()
{
	date d;
	pts(&d);
	printf("%d-%d-%d",d.year,d.month,d.day);
	return 0;
	
}

10.结构作为函数参数

例题:

#include<stdio.h>
struct date{
	int year;
	int month;
	int day;
	
};
void DATE(date d){
	printf("%d-%d-%d\n",d.year,d.month,d.day);
} 
int main()
{
	date p={2024,12,31};
	DATE(p);
	return 0;
}

结构变量作为函数参数有以下几个特点:

1.单向传递
2.在实参和形参之间复制所有结构成员的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值