C语言中的结构体

一、结构体的定义和结构体变量的定义

1、结构体定义

什么是结构体,结构体是为了方便我们管理一些数据,将一些数据放到一起形成结构体。

如何定义结构体,结构体是一个新的类型,就像int,char,float,short一样

定义一个学生结构体

//定义一个学生结构体
#include<stdio.h>
//结构体必须定义在主函数前面
struct student
{
	char name[20];//学生姓名
	int age;       //学生年龄
	int number;    //学生学号
};//结构体后面的分号一定不要忘记,缺少会报错
int main()
{
	struct student a; //定义一个结构体变量 变量名为a

	return 0;
}

2、结构体变量定义及初始化 

定义结构体变量就像定义整型变量一样要在前面加上结构体名(struct 结构名)

//以学生结构体为例

struct student a;  //定义了一个学生结构体变量,变量名为a

//结构体变量初始化

struct student a={"小王",18,1101};

示例:定义一个学生结构,有学生的姓名,年龄,学号,实现输入,并输出

#include<stdio.h>
//结构体必须定义在主函数前面
struct student
{
	char name[20];//学生姓名
	int age;       //学生年龄
	int number;    //学生学号
};
int main()
{
	struct student a;//定义一个结构体变量
	//输入
	scanf("%s%d%d",a.name,&a.age,&a.number);   //.访问结构体变量
	//输出
	printf("姓名:%s,年龄:%d,学号:%d\n", a.name, a.age, a.number);
	return 0;
}

二、结构体指针

定义一个指针变量,指向结构体变量(以学生结构体为例)

#include<stdio.h>
//结构体必须定义在主函数前面
struct student
{
	char name[20];//学生姓名
	int age;       //学生年龄
	int number;    //学生学号
};
int main()
{
	struct student a;//定义一个结构体变量
	//定义一个结构体指针
	struct student* p = &a;
	//通过结构体指针输入学生信息
	scanf("%s%d%d", p->name, &p->age, &p->number);
	//通过结构体指针输出
	printf("姓名:%s,年龄:%d,学号:%d\n", p->name, p->age, p->number);
	//通过printf输出
	printf("姓名:%s,年龄:%d,学号:%d\n", a.name, a.age, a.number);
	return 0;
}

| 成员运算符 | 算法                                                       |     左值        | 右值     |
| ----------       | ---------------------------------- | ----------      | --------          |
| .                  | 运算得到结构体变量中的成员对象本身 | 结构体变量 | 成员名称 |
| ->                | 运算得到结构体变量中的成员对象本身 | 结构体指针 | 成员名称 |

三、结构体做函数参数

1、值传递

#include<stdio.h>
//结构体必须定义在主函数前面
struct student
{
	char name[20];//学生姓名
	int age;       //学生年龄
	int number;    //学生学号
};
//函数声明
void print_student(struct student a);

int main()
{
	struct student a;//定义一个结构体变量
	//定义一个结构体指针
	struct student* p = &a;
	//通过结构体指针输入学生信息
	scanf("%s%d%d", p->name, &p->age, &p->number);

	//调用函数
	print_student(a);
	
	return 0;
}
//输出学生信息函数
void print_student(struct student w)//值传递
{
	printf("姓名:%s,年龄:%d,学号:%d\n", w.name, w.age, w.number);
}

2、地址传递

#include<stdio.h>
//结构体必须定义在主函数前面
struct student
{
	char name[20];//学生姓名
	int age;       //学生年龄
	int number;    //学生学号
};
//函数声明

void print_student(struct student* w);
int main()
{
	struct student a;//定义一个结构体变量
	//定义一个结构体指针
	struct student* p = &a;
	//通过结构体指针输入学生信息
	scanf("%s%d%d", p->name, &p->age, &p->number);

	//调用函数
	print_student(p);
	
	return 0;
}
//输出学生信息函数

void print_student(struct student* w)//地址传递
{
	printf("姓名:%s,年龄:%d,学号:%d\n", w->name, w->age, w->number);
}

四、结构体数组

直接用题来理解

定义一个学生结构体,定义一个学生结构体数组,定义一个set_in()函数实现输入学生信息,定义一个print_all()函数实现输出所有学生信息,定义一个age_25()函数判断年龄大于25岁的学生并输出学生的信息。

#include<stdio.h>

struct student
{
	char name[20];//学生姓名
	int age;       //学生年龄
	int number;    //学生学号
};
//函数声明
void set_in(struct student* p, int n);
void print_all(struct student* p, int n);
void age_25(struct student* p, int n);
void print_student(struct student* p);
int main()
{
	//定义结构体数组
	struct student s[3];

	//调用函数
	//输入
	set_in(s, 3);
	//输出所有学生信息
	print_all(s, 3);

	printf("25岁以上学生的信息\n");
	//找到25岁以上的学生并输出
	age_25(s, 3);
	
	

	return 0;
}

//实现输入学生信息的函数set_in
void set_in(struct student* p, int n)
{
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		scanf("%s%d%d", p[i].name,& p[i].age,& p[i].number);
	}
}
//实现输出所有学生信息的函数print_all
void print_all(struct student* p, int n)
{
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		printf("姓名:%s,年龄:%d,学号:%d\n", p[i].name, p[i].age, p[i].number);
	}
}

//实现找到年龄大于25岁的学生并输出学生的信息
void age_25(struct student* p, int n)
{
	int i = 0;
	for (i = 0; i < n; i++)
	{
		if (p[i].age > 25)
		{
			print_student(&p[i]);
		}
	}
}

//实现输出学生的信息
void print_student(struct student * p)
{
	printf("姓名:%s,年龄:%d,学号:%d\n", p->name, p->age, p->number);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值