目录
基础知识
结构体定义
基础知识
在c语言中变量是有类型的,比如整型,char型,浮点型等,这些都是单一的类型,那么如果说我要定义一个学生的信息,那么这些单一的类型是不足以表达一个学生的全部信息,所以我们就要用到结构体的知识,结构体是包含了很多种类型的一种结构,就像是一个大杂烩里面什么东西都有,比如指针,整型,数组,char型甚至是放结构体,唯一不能放的是函数,结构体里面的类型不能再创建的时候赋值,结构体只是创建类型。
结构体定义
struct 结构体标签
{成员1,成员2,成员3
}; //定义了一个结构体类型 此时还不是结构体变量
结构体标签:用来区分不同的结构体,就像是人的名字一样
成员:可以是任意的类型,char,整型,数组等 甚至是结构体
结构体类型就跟其他的类型是一样的,例如:
结构体的变量类型面加的符号是' ; --- ' 而枚举变量后面的符号是 ' ,';
struct student
{int number;char name[50];char sex[10];
}; //结构体类型定义一个结构体变量
struct student Jack; //Jack 就是一个结构体变量
int a;
int 和 struct student 是一种类型
结构体不是系统自带的一种类型,而是我们自己自定义的,不像int类型是系统自带的,与生俱来的。
struct student
{成员1;成员2;成员3;
}Jack, Pack; // 定义了两个结构体变量 Jack 和 Pack等价于struct student{成员1;成员2;成员3;} Jack,Pack;
这个是再定义结构体的时候定义变量 如果说是在主函数的情况下,我们应该这样定义:
#include <stdio.h>
struct node
{int a;
};
int main()
{ struct node Jack,Pack;//在主函数内这样定义正确 不要重新写一个结构体在初始化定义变量Jack.a= 100; //那样就会出现语法错误Pack.a =30;printf("%d %d \n",Jack.a,Pack.a);return 0;
}
Jack就是一个结构体变量,而struct student 是一个结构体类型,就是一种类型打个比方:结构体类型就像是一张施工图的图纸,而结构体变量就是建筑物,这个建筑物是按照施工图来建造的,那么建造的每一个建筑物他们的样貌都是一样的,但是名字不一样;所以结构体变量 可以定义很多个,但是结构体类型只能有一种,一种结构体类型可以定义很多的结构体变量。
注意:
如果在结构体里面定义结构体,那么里面的结构体不用写结构体标签
struct node
{int a;float d;doule e;struct {int b;int c; }x; //x跟a,d,e一样是变量名
}
上面等价于下面
struct node
{int a;float d;doule e;struct {int b;int c;} x; //x跟a,d,e一样是变量名
}; 此时的结构体里面的结构体的结构体标签一般是省略的
当一个结构体a被用作另一个结构体b的内部成员,并且在外部不直接使用结构体a时,通常可以省略结构体a的标签(即结构体名)。这种情况下,结构体a作为一个匿名结构体嵌套在结构体b中。
相关的结构体里面放结构体的表示方式在我的文章《c语言笔记 结构体内嵌套结构体的表示方式》中。