结构体
结构体的定义
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;
}