大家好我们今天学习的是结构体,话不多说。上车吧!!!
文章目录
- 1. 结构体类型的声明
- 2. 结构体变量的定义创建和初始化
- 3. 结构成员访问操作符
- 4. 结构体内存对⻬
- 5. 结构体传参
- 6. 结构体实现位段
前言
C语言中类型有很多,int short char double 等等,但是随着要求的变化这些是远远不够满足我们的需要。所以就有了结构体的一席之地。结构体可以方便我们做好多事,比如一个班级的学生我们想记录他的姓名 学号 体重 身高 各科成绩等等。这个时候怎么用普通的 int这种实现。不太方便吧,所以有了结构体的出现。那么跟随我的脚步让我们重新认识一下吧->结构体。
提示:以下是本篇文章正文内容,下面案例可供参考
一、结构体类型的声明
struct tag
{member-list;
}variable-list;
这里的 member-list是结构体成员,variable-list是结构体的变量名,tag就是结构体类型名。
struct Stu
{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号
}; //分号不能丢
二、结构体变量的定义创建和初始化
1.创建
结构体就是将不同类型的数据组合成一个有机的整体,以便于引用。如定义一个学生的信息:struct student
{
int num;
char name[20];
int score;
};
struct为结构体关键字,student就是这结构体的类型名,而 num,name, score就是该结构体的成员,他们可以是不同类型的,注意在定义类型的时候不要对结构体成员num,name, score赋初值。其次就是在大括号后面要有分号“;”。
2.定义
(1)定义变量的方式都是大同小异的,都为数据类型+变量名这样一种方式,比如int型,首先得有int这样一个数据类型,然后再用int这个数据类型去定义一个变量,同样的,我们要定义一个结构体变量,必须要有一个结构体类型,然后用这个类型去定义一个变量。结构体变量的定义有多种方式:
方式一:先定义结构体类型再定义变量名
struct student{int num;char name[20];int score;};
int main()
{struct student zhangsan;return 0;
}
其中struct是关键字,student是结构体标记(用于为结构体命名),struct student代表该结构体的类型, 大括弧里面就是结构体的成员。注意大括弧的后面一定要有一个分号‘;’。到此为止我们有了"struct student"这样的类型了,struct student就等价于我们的int一样,接下来我们就要定义一个这样类型的变量,定义格式如下:struct student zhangsan; 这个zhangsan就是我们所要的结构体变量。
(2)
方式二:在声明类型的同时定义变量
如:
这种方式定义结构体,后续可以根据需要定义新的变量,如struct student Wangwu。 注意:不能用Zhangsan去定义新的变量,这里Zhangsan、Lisi都为变量名而不是结构体类型。
(3)
方式三:直接定义结构体类型变量
这种定义方式中结构体变量只能在定义结构体类型的时候定义,不能再定义其他的变量。这样的定义的结构体类型是没有名字的,我们也可以用typedef重新为这样的结构体类型命,如:
使用typedef后,我们可以用Zhangsan作为数据类型来定义新的变量。需要注意的是,不能直接使用Zhangsan.num,因为Zhangsan不是变量,而是结构体类型。
3.初始化
关于结构体的一点说明:
1、不能将结构体变量作为整体进行操作:
printf("%d, %d\n", A);错误
scanf("%d, %d\n”,&A); //错误
printf("%d, %d\n”, A.num, A.score); //正确
scanf("%d, %d\n”, &Lucy.num, &Lucy.sex); //正确
2、当结构体变量的成员也是结构体类型时,引用必须用最底层的成员变量,如下
3、成员名可与程序中的变量名相同,二者代表不同对象
4、可以引用结构体变量成员的地址,也可以引用结构体变量的地址,例如:
scanf("%d", &A.num); //输入A.num的值
printf("%d", &A); //输出Bob的首地址
目的:主要用作函数参数,传递结构体变量的地址。
三. 结构成员访问操作符
1.直接访问(结构体变量.成员名)
struct Point
{
int x;
int y;
}p = { 1,2 };
int main()
{
printf("x:%d y:%d\n", p.x, p.y);
return 0;
}
2.间接访问(结构体变量->成员名)
int main()
{
struct Point p = { 3,4 };
struct Point* ptr = &p;
ptr->x = 10;
ptr->y = 20;
printf("x = %d y = %d\n", ptr->x, ptr->y);
return 0;
}
总结
这个是对结构体有了基本的认识了,谢谢大家的观看,不对的地方请在评论区留言。