C语言基础专题 - 结构体的概念与用法
jcLee的个人博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343
本文地址:https://blog.csdn.net/qq_28550263/article/details/112710139
1.🧐什么是结构体?
答:结构体是C语言中一种用户自定义数据类型。
2.🔧怎样使用结构体?
答:在这里没有长篇累牍地对结构体的知识介绍的必要,请看这样一段关于中学英语猛男的代码后就能明白:
#include <stdio.h>
#include <string.h>
在这里,我们先定义一个名为Student结构体
struct Student{ // 使用 struct 关键字来定义结构体,Student是结构体的所谓标签,说白了也就是结构体的名字
char SecoendName[50]; // 成员变量1 |
char FirstName[50]; // 成员变量2 | 成员变量之间(结构成员)允许存储不同类型的数据项
char gender[50]; // 成员变量3 |
int age; // 成员变量4 |
};
主函数,在这里我们将使用上面定义的 结构体
int main(){
/**
* 主函数上面我们定义一个名为Student的结构体
* 它就像一个建筑图纸,可以用来构建多个结构体的实例。
**/
Student stdt; // 声明一个名为stdt的Student结构类型,类似于部分面向对象语言中类的实例化,在C语言里与声明一个如int类型等类型的功能类似。
// 接下来我们对student的各个成员指定一个值,这个值的类型必须满足结构体Student中预先定义的类型。
strcpy( stdt.SecoendName, "李");
strcpy( stdt.FirstName, "华");
strcpy( stdt.gender, "男");
stdt.age = 17;
// 然后我们试着在终端打印出这些值,看看运行结果
printf( "姓 : %s\n", stdt.SecoendName);
printf( "名 : %s\n", stdt.FirstName);
printf( "性别 : %s\n", stdt.gender);
printf( "年龄 : %d\n", stdt.age);
return 0;
}
运行结果:
姓 : 李
名 : 华
性别 : 男
年龄 : 17
--------------------------------
Process exited after 0.02151 seconds with return value 0
请按任意键继续. . .
3.🤷♂️对以上案例的补充与扩展
上面我们定义了一个标签(之后一律成为名字/名)为Student结构体,即:
struct Student{
char SecoendName[50];
char FirstName[50];
char gender[50];
int age;
};
我们指定了结构体的名字为Student,其目的就在之后可以使用这个结构体,因此以下缺少结构体名的定义是没有意义、错误的:
// 错误的定义
struct {
char SecoendName[50];
char FirstName[50];
char gender[50];
int age;
};
但是可以在结构体尾部定义一个或者多个结构变量取代结构体名的指定:
#include <stdio.h>
#include <string.h>
/* 直接在末尾给出一个结构变量 stdt ,表示该变量具有struct{...}中所指定的结构 */
struct{
char SecoendName[50];
char FirstName[50];
char gender[50];
int age;
}stdt1,stdt2={"小","红","女",16};
/*主函数,在这里我们将使用上面定义的 结构体 */
int main(){
strcpy( stdt1.SecoendName, "李");
strcpy( stdt1.FirstName, "华");
strcpy( stdt1.gender, "男");
stdt1.age = 17;
// 然后我们试着在终端打印出这些值,看看运行结果
printf( "姓 : %s\n", stdt1.SecoendName);
printf( "名 : %s\n", stdt1.FirstName);
printf( "性别 : %s\n", stdt1.gender);
printf( "年龄 : %d\n", stdt1.age);
printf( "姓 : %s\n", stdt2.SecoendName);
printf( "名 : %s\n", stdt2.FirstName);
printf( "性别 : %s\n", stdt2.gender);
printf( "年龄 : %d\n", stdt2.age);
return 0;
}
运行结果:
姓 : 李
名 : 华
性别 : 男
年龄 : 17
姓 : 小
名 : 红
性别 : 女
年龄 : 16
--------------------------------
Process exited after 0.02143 seconds with return value 0
请按任意键继续. . .
其中可以看到stdt2的初始值在定义结构体的时候我们就指定了,即对该变量完成了初始化。