个人主页:Weraphael
✍作者简介:目前正在回炉重造C语言(2023暑假)
✈️专栏:【C语言航路】
希望大家多多支持,咱一起进步!
如果文章对你有帮助的话
欢迎 评论 点赞 收藏 加关注
结构是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量。
结构体是用来描述复杂对象的
// tag - 是标签名,是可以根据需求改变的
struct tag //这一整串是类型
{
//代码块里是结构体成员
//可以是不同类型
member_list // 成员列表
}list;
//list - 结构体变量
//注意:后面有分号
通过上面的模板来举个例子
假设要描述一名学生(名字、年龄、分数)
struct student //类型
{
//结构体成员
char name[20];
int age;
double score;
}stu,stu2;
// stu、stu2 - 也是结构体变量(全局变量)
int main()
{
// 创建结构体变量(局部变量)
// 类型 + 变量
struct student stu1;
return 0;
}
结构的成员可以是标量、数组、指针,甚至是其他结构体。
struct student //类型
{
char name[20];
char sex[10];
int age;
double score;
};
int main()
{
//结构体变量初始化
struct student stu1 = { "小明","男",18,72.5 };
return 0;
}
往期博客链接:点击传送
#include
struct student //类型
{
char name[20];
int age;
char sex[10];
double score;
};
int main()
{
//结构体变量初始化
struct student stu1 = { "小明",18,"男",95.5 };
//结构体访问
printf("名字:%s\n年龄:%d\n性别:%s\n分数:%.1lf\n", stu1.name, stu1.age, stu1.sex, stu1.score);
return 0;
}
【程序结果】
#include
struct student //类型
{
char name[20];
int age;
char sex[10];
double score;
};
int main()
{
//结构体变量初始化
struct student stu1 = { "小明",18,"男",95.5 };
struct student* pa = &stu1;
//结构体访问
printf("名字:%s\n年龄:%d\n性别:%s\n分数:%.1lf\n", pa->name,pa->age,pa->sex,pa->score);
return 0;
}
【程序结果】
#include
struct student //类型
{
char name[20];
int age;
char sex[10];
double score;
};
int main()
{
//结构体变量初始化
struct student stu1 = { "小明",18,"男",95.5 };
struct student* pa = &stu1;
//结构体访问
//*pa就是stu1
printf("名字:%s\n年龄:%d\n性别:%s\n分数:%.1lf\n",(*pa).name,(*pa).age,(*pa).sex,(*pa).score);
return 0;
}
【程序结果】
#include
struct S
{
int a;
char c;
};
struct P
{
double d;
struct S s;
double f;
};
int main()
{
//100和's'是结构体s的
struct P p = { 5.5,{100,'s'},33.3 };
//只打印嵌套的结构体
printf("%d %c\n", p.s.a, p.s.c);
return 0;
}
【程序结果】
只要一步一步去访问,嵌套结构体同样也能访问。当然也可以用指针来访问,这里就不为大家演示了。
注意:如果使用传值调用,形参的改变不影响实参。
#include
struct student
{
char name[20];
int age;
char sex[6];
double score;
};
//不需要返回参数用void
void Print(struct student stu) //传结构体变量同样也能用结构体变量来接收
{
printf("名字:%s\n年龄:%d\n性别:%s\n分数:%.1lf\n", stu.name, stu.age, stu.sex, stu.score);
}
int main()
{
struct student stu1 = { "小明",18,"男",95.5 };
//封装一个Print函数负责打印
Print(stu1);
return 0;
}
【程序结果】
#include
struct student
{
char name[20];
int age;
char sex[6];
double score;
};
//不需要返回参数用void
void Print(struct student* stu) //传地址需要用指针来接收
{
printf("名字:%s\n年龄:%d\n性别:%s\n分数:%.1lf\n", (*stu).name, (*stu).age, (*stu).sex, (*stu).score);
// 或者还可以使用->操作符来访问
//printf("名字:%s\n年龄:%d\n性别:%s\n分数:%.1lf\n", stu->name, stu->age, stu->sex, stu->score);
}
int main()
{
struct student stu1 = { "小明",18,"男",95.5 };
//封装一个Print函数负责打印
Print(&stu1);
return 0;
}
【程序结果】
那么大家认为传值调用好还是传址调用好呢?
答案是:传址调用