初认识
本文章意在入门结构体,能初步看懂关于结构体的简单代码,并可以自己上手。
简单比较
数组是一组相同类型元素的集合,而结构体可以是一组不同类型元素的集合。
结构体的声明:
这只是自定义一个数据类型,并没有实现它。
既可以在main()内声明,也可以在main()外声明。
//struct 为关键字 name为自定义结构体的名称
struct name
{
//成员列表
char name[20];
int age;
float score;
}s1, s2; //分号是较为容易忽略的
struct name01
{
int num;
double aver;
struct name s;//内置一个结构体成员,实现嵌套
}
实现并初始化自定义数据类型:
//在结构体的声明中
//s1, s2创建了结构体变量,就是实现了name这个数据类型,并且这个是全局变量
//也可以在main()外
struct name a;
//还可以在main()内
int main()
{
struct name s3 = {"lisi", 19, 96.5};//定义了s3 name类型的结构体,并进行初始化
printf("%s %d %f", s3.name, s3.age, s3.score);//打印结构体成员
struct name01 a = {20, 60.0, {"list", 30, 93.0f}};
printf("%d %f", a.num, a.s.score);//打印结构体的成员变量及结构体中结构体的成员变量
}
结构体指针:
struct name* p = &a;//结构体指针p指向结构体变量a
结构体对成员变量的引用:
//1、结构体变量.成员变量
s3.age
//2、结构体指针->成员变量
p->num
p->s.age
结构体传参:
//struct name
//{
//成员列表
//char name[20];
//int age;
//float score;
//}b;
void Info01(struct name p)//不推荐,如果创建一个大的结构体对象,系统资源会浪费很多,进而导致性能的下降
{
p.name = "somebody";
p.age = 18;
p.score = 80.0f;
}
void Info02(struct name* p)
{
p->name = "somebody";
p->age = 18;
p->score = 80.0f;
}
//1、传值调用:
Info01(b);
//2、传参调用:
Info02(&b);