当我们有大量且类型不同的数据需要描述的时候,如果针对每个数据都去定义一个变量或数组,是很消耗时间和内存的,那么如何跟方便的存储大量不同类型的数据呢,这就需要用到结构体变量了
结构体变量——struct是一种构造类型
构造类型:不是基本类型的数据结构也不是指针,它是由若干个相同或不同类型的数据构成的集合。
结构体概念:结构体是一种构造类型的数据结构,是一种或多种基本类型或构造类型的数据的集合
1.结构体类型的定义
结构体类型的定义方法:在使用结构体之前必须先有类型,然后用类型定义数据结构,这个类型相当于一个模具
定义结构体类型的方式如下:
struct 结构体类型名
{
成员列表
};
2.定义结构体变量
如果我们要定义结构体变量,可以在分号前面定义,下面举个详细的例子
假如我们要记录三名学生的年龄,姓名和性别,我们可以这样定义结构体类型和结构体变量
有了结构体类型之后,就可以用类型定义变量了
一般结构体类型都会定义在全局,也就是main函数的外面,所以在定义结构体类型的同时定义变量,这些变量一般都是全局变量,定义完类型之后定义的结构体变量内存分配要看定义的位置
struct stu ;
{ //定义了三个struct stu类型的变量
//每个变量都有三个成员,分别是num,name,sex
int num;
char name[20];
char sex;
} lucy,bob,lilie; //结构体变量,分别是lucy,bob,lilie
在定义结构体类型的时候顺便定义结构体变量,以后还可以定义结构体变量struct结构体类型名
struct结构体类型名
{
成员列表;
}结构体变量1,变量2;
struct结构体类型名 变量3,变量4;
注意:一般结构体类型都会定义在全局,也就是main函数的外部,所以在定义结构体类型的同时定义变量,这些变量一般都是全局变量,
定义完类型之后定义的结构体变量内存分配要看定义的位置
3.无名结构体类型的定义和typedef定义
在定义结构体类型的时候,没有结构体类型名,我们可以顺便定义结构体变量,但是
因为没有类型名,所以之后就不能再定义相关类型的数据了
struct
{
成员列表;
}变量1,变量2;
使用typedef给结构体变量取别名
通常将一个结构体类型重新起个类型名,用新的类型名替代原先的类型
typedef struct 结构体名 //这里的结构体名是可以省略的
{
成员列表;
}重新定义的结构体类型名;
注意:typedef主要用于给一个类型取别名,此时相当于给当前结构体重新起来一个类型名,相当于struct结构体名
4.结构体变量的初始化及使用
结构体变量的定义初始化及使用
1.结构体变量的定义和初始化
2.在定义结构体变量之前首先得有结构体类型,然后在定义变量
3.在定义结构体变量的时候,可以顺便给结构体变量赋初值,被称为结构体的初始化
4.结构体变量初始化的时候,各个成员按顺序初始化
struct stu
{
int id;
char name[20];
char sex;
char age;
}zhangsan,lisi = {1002,“李四”,’B’,25};
int main()
{
struct stu wangwu;
//结构体变量的初始化
struct stu zhaoliu = {1001,“赵六”,‘B’,20};
return 0;
}
使用typedef对结构体成员取别名并初始化
使用typedef对结构体变量取别名
typedef struct
{
int a;
int b;
char c;
}MSG; //使用了typedef就不能同时定义结构体变量了
int main()
{
MSG message1,message2 = {100,200,’a’};
//使用了typedef在定义结构体变量的时候不用加struct
}
结构体变量的使用
结构体变量对成员调用的方法:
结构体变量.结构体成员 注意中间是一个.操作符
struct stu
{
int id;
char name[20];
char sex;
char age;
}zhangsan,lisi = {1002,“李四”,’B’,25}
int main()
{
struct stu wangwu;
struct stu zhaoliu = {1001,“赵六”,‘B’,20};
//结构体变量的使用
zhangsan.id = 1001;
strcpy(zhangsan.name,”zhangsan”);//这里不能直接进行赋值
zhangsan.sex = ‘B’;
zhangsan.age = 18;
printf(“%d-%s-%c-%d\n”,zhangsan.id,zhangsan.name,zhangsan.sex,zhangsan.age);
//使用“.”操作符访问对结构体成员进行访问
printf(“%d-%s-%c-%d\n”,lisi.id,lisi.name,lisi.sex,lisi.age);
return 0;
}
5.在结构体中嵌套结构体
typedef struct
{
int year;
int month;
int birthday;
}BD;
typedef struct
{
int id;
char name[32];
BD birthday;
}stu;
int main()
{
stu xiaomin;
xiaoming.id = 1001;
strcpy(xiaomign.name = “小明”);
//如果要对嵌套的结构体赋值,就要找到最内层的成员再赋值
xiaoming.birthday.year = 2002;
xiaoming.birthday.month = 12;
xiaoming.birthday.day = 20;
printf(“%d-%s-%d:%d:5d\n”,xiaoming.id,xiaoming.name,\
xiaoming.birthday.year,xiaoming.birthday.month,\ xiaomiang.birthday.day);
//嵌套结构体的定义并初始化
stu xiaoli = {1002,”xiaoli”,2000,1,1};
}
6.相同类型的结构体变量可以相互赋值的
注意:必须是相同类型的结构体变量,才能相互赋值
struct stu
{
int id;
char name[32];
char sex;
int age;
};
int main()
{
struct stu zhangsan;
zhangsan.id = 1001;
strcpy(zhangsan.name,”zhangsan”);//这里不能直接进行赋值
zhangsan.sex = ‘B’;
zhangsan.age = 18;
struct stu lisi;
lisi = zhangsan;
return 0;
}
写到这里,相必大家也对结构体有了初步的了解
除了有这种简单的结构体,后面我还会讲到结构体数组、结构体指针等比较复杂的东西
大家一起加油啊,如果有讲的不好的地方,请大家指正
今天的文章C语言结构体变量——struct分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/72867.html