一、前言
结构体是一些值的集合,因此它和数组很相似
但是有些许不同:
数组中的值,每个值的数据类型是相同的;而结构体中的值,数据类型可以是不同的。
二、结构体的声明
结构体的定义:结构体是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量。
结构体的创建:
struct stu
{
char name[20];
short age;
};
--------
struct stu
{
}s1,s2,s3;//s1,s2,s3是三个全局变量结构体变量
--------
typedef struct stu
{
}stu;//这个代码将数据类型名改为stu
补充:
1.struct stu等价于int、char等数据类型
2.定义一个结构体类型(此时并没有开辟空间不会占用内存空间);创建一个结构体变量后才会占有空间
用两个方法理解:
a.上面我们说结构体类型等价与int,我们知道单单一个int类型不会占用内存;但是创建一个整型变量a,它会开辟空间int a=10;才会占用空间。
b.创建的结构体类型就像设计房子的图纸;创建结构体变量后才成生成房子,此时才能占用空间
3.这里分号很容易忘记
三、结构体的初始化
一般的结构体初始化
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
typedef struct stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}stu;
int main()
{
stu s1 = {"张三",20,"18228238238","男"};
stu s2 = {"死狗",18,"13423232451","保密"};
return 0;
}
补充:
结构体的创建可以包含其他结构体(嵌套结构体)
那我们嵌套结构体的初始化
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
typedef struct stu
{
char name[20];
short age;
char tele[12];
char sex[5];
}stu;
typedef struct stu1
{
char ch[10];
struct stu s;
char* pc;
}stu1;
int main()
{
int a = 0;
stu s1 = {"张三",20,"18228238238","男"};
stu1 s2 = { "hehe",{"张三",20,"18228238238","男"},&a };
return 0;
}
说明:嵌套调用的部分用一个{}初始化。
四、访问数据体成员数据
基本知识:结构体成员访问操作符’.‘’->’
用法:变量名.成员名;指针名->成员名;嵌套初始化的成员访问我们需要两个’.‘’.'连用
五、结构体打印数据
这个一个比较口语的解答,实际上是因为函数传参调用的时候都是压栈进的,可能导致系统负载过高
六、理解函数传参是会压栈的
七、结语
希望大家指出不足之处