文章目录
结构体
概述
- 数组:描述一组具有相同类型数据的有序集合,用于处理大量相同类型的数据运算。
- 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。
- C语言中给出了另一种构造数据类型——结构体。
结构体变量的定义和初始化
定义结构体变量的方式:
- 先声明结构体类型再定义变量名
- 在声明类型的同时定义变量
- 直接定义结构体类型变量(无类型名)
示例:
方法一:
#include<stdio.h>
//struct 结构体名
//{
// //结构体成员列表
// 姓名
// 年龄
//};
struct student
{
char name[21];
int age;
int score;
char addr[51];
};
int main()
{
//创建及结构体变量
//方法1:比较慢
//struct student stu;//结构体类型 结构体变量
//strcpy(stu.name,"张三");//结构体对字符串数组进行赋值时,采用拷贝赋值。//数组名为常量,所以对其赋值的时候不能使用=,得使用strcpy
//stu.age = 18;
//stu.score = 100;
//strcpy(stu.addr, "山西省太原市");
//方法2
struct student stu = {
"张三",18,100,"山西省太原市" };
printf("姓名:%s\n", stu.name);
printf("年龄:%d\n", stu.age);
printf("成绩:%d\n", stu.score);
printf("地址:%s\n", stu.addr);
return 0;
}
方法二:
#include<stdio.h>
struct student
{
char name[21];
int age;
int score;
char addr[51];
}stu= {
"张三",18,100,"山西省太原市" };
int main0202()
{
printf("姓名:%s\n", stu.name);
printf("年龄:%d\n", stu.age);
printf("成绩:%d\n", stu.score);
printf("地址:%s\n", stu.addr);
return 0;
}
int main(void)
{
struct student stu;
//键盘获取值
scanf("%s%d%d%s", stu.name, &stu.age, &stu.score, stu.addr);//数组名为首地址,所以不用加&
printf("姓名:%s\n", stu.name);
printf("年龄:%d\n", stu.age);
printf("成绩:%d\n", stu.score);
printf("地址:%s\n", stu.addr);
return 0;
}
结果:
姓名:张三
年龄:18
成绩:100
地址:山西省太原市
结构体数组
示例:
头文件.h——struct.h
#pragma once
struct student
{
char name[21];
int age;
char sex;
int score[3];
char addr[51];
};
主函数调用头文件
#include<stdio.h>
#include "struct.h"//头文件调用
int main(void)
{
struct student stu[3]=
{
{
"马笑笑",19,'M',90,100,98,"河南郑州"},
{
"丁心",18,'F',97,96,99,"重庆"},
{
"刘光头",15,'M',97,96,98,"重庆"}
};
printf("结构体大小:%d\n", sizeof(stu));
printf("结构体元素大小:%d\n", sizeof(stu[0]));结构体成员需要偏移对齐
printf("结构体元素个数:%d\n", sizeof(stu) / sizeof(stu[0]));
for (int i = 0; i < 3; i++)
{
printf("姓名:%s\n", stu[i].name);
printf("年龄:%d\n", stu[i].age);
printf("性别:%s\n", stu[i].sex == 'M' ? "男" : "女");
printf("成绩1:%d\n", stu[i].score[0]);
printf("成绩2:%d\n", stu[i].score[1]);
printf("成绩3:%d\n", stu[i].score[2]);
printf("地址:%s\n", stu[i].addr);
printf("\n");
}
return 0;
}
结果:
结构体大小:288
结构体元素大小:96
结构体元素个数:3
姓名:马笑笑
年龄:19
性别:男
成绩1:90
成绩2:100
成绩3:98
地址:河南郑州
姓名:丁心
年龄:18
性别:女
成绩1:97
成绩2:96
成绩3:99
地址:重庆
姓名:刘光头
年龄:15
性别:男
成绩1:97
成绩2:96
成绩3:98
地址:重庆
结构体排序
#include<stdio.h>