c语言结构体定义和结构体数组第一部分笔记

结构体

结构体的定义

struct  名称

{

        类型   成员变量名

};

例如 

struct stu
{
    char name[11];
    int age;
    char address[100];
};

赋值,和输出

int main() {
	struct stu stu1;  //struct stu 这个整体是一个类型就像是int
	//stu1.name = "张三";  数组常量没有办法赋值错误
	strcpy(stu1.name, "张三");   //strcpy 赋值字符串到指定内存空间
	stu1.age = 19;
	strcpy(stu1.address, "河北省保定市");


	//结构体的输出
	printf("姓名:%s\n", stu1.name);
	printf("年龄:%d\n", stu1.age);
	printf("地址:%s\n", stu1.address);

	return 0;
}

还可以使用大括号的方式赋值,类似于java的有参构造器

int main() {
	struct stu stu2 = { "李四",20,"中国" };
	printf("姓名:%s\n", stu2.name);
	printf("年龄:%d\n", stu2.age);
	printf("地址:%s\n", stu2.address);
	return 0;
}

也可以在定义的时候直接赋值

struct stu
{
	char name[11];
	int age;
	char address[100];
} stu3 = {"王五",11,"北京"};

还可以用scanf来直接输入

int main() {
	//直接输入信息
	struct stu stu66;
	printf("请您输入信息:");
	scanf("%s%d%s", stu66.name, &stu66.age, stu66.address);  //数组就是地址,所以不用加取地址的符号&  中间打空格直接输入就OK
	printf("姓名:%s\n", stu66.name);
	printf("年龄:%d\n", stu66.age);
	printf("地址:%s\n", stu66.address);

	return 0;
}

结构体数组

跟c中普通类型的数组定义过程是一样的

如 int arr[3];

struct student  stu[3];// 学生类型的数组

也可以使用sizeof来获取长度

#include<stdio.h>
struct student
{
	char name[21];
	int souce[3];//成绩
};
int main() {
	//结构体数组赋值
	struct student stu[3] = {
		{"张三",11,22,33},
		{"李四",44,55,66},
		{"王五",77,88,99}
	};

	//遍历信息
	for (int  i = 0; i < 3; i++)
	{
		printf("姓名:%s\n", stu[i].name);
		printf("数学成绩:%d\n", stu[i].souce[0]);
		printf("英语成绩:%d\n", stu[i].souce[1]);
		printf("语文成绩:%d\n", stu[i].souce[2]);
		printf("-------------------------\n");
	}

		
	//使用sizeof计算大小
	//一般都会比定义的时候大一点,因为结构体成员需要内存偏移
	printf("数组的大小为%d\n", sizeof(stu));
	printf("数组中元素的大小为:%d\n", sizeof(stu[0]));
	printf("数组中元素个数:%d\n", sizeof(stu) / sizeof(stu[0]));


	return 0;
}

对结构体数组,进行排序

这里采用的是对年龄进行最简单的冒泡排序

完全就可以当成变量去直接的交换

#include<stdio.h>
struct student
{
	char name[21];
	int age;
};
int main()
{
	//创建学生类型的数组并赋初值
	struct student stu[4]={
		{"张三",51},
		{"李四",11},
		{"王五",21},
		{"赵6",5}
	};
	for (int i = 0; i < 4; i++)
	{
		printf("姓名:%s\n", stu[i].name);
		printf("年龄: %d\n", stu[i].age);
		printf("-------------------------\n");
	}
	//开始排序(这里使用的是最简单的冒泡排序)
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3 - i;j++) {
			if (stu[j].age > stu[j + 1].age) { //升序
				//定义一个临时变量交换
				struct student temp = stu[j];
				stu[j] = stu[j + 1];
				stu[j + 1] = temp;
			}

		}
	}

	printf("排序后\n");
	for (int i = 0; i < 4; i++)
	{
		printf("姓名:%s\n", stu[i].name);
		printf("年龄: %d\n", stu[i].age);
		printf("-------------------------\n");
	}
	return 0;

	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小萌新上大分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值