目录
结构体类型的声明
结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
结构声明
struct a
{
int a;
char b;
};
描述一个学生
struct a//描述一个学生
{
char xm[20];//姓名
int nl;//年龄
char xb[5];//性别
int xh[20]//学号
};
结构体的创建和初始化
#include<stdio.h>
struct a//描述一个学生
{
char xm[20];//姓名
int nl;//年龄
char xb[5];//性别
char xh[20];//学号
};
int main()
{
//按照结构体成员的顺序初始化
struct a xiao = { "小米",18,"男","10080112"};
//打印结构体
printf("姓名 = %s\n", xiao.xm);
printf("年龄 = %d\n", xiao.nl);
printf("性别 = %s\n", xiao.xb);
printf("学号 = %s\n", xiao.xh);
printf("------------------------------------\n");
//按照指定的顺序初始化
struct a haha = { .xb = "男",.xh = "200457893",.xm = "熊猫",.nl = 22 };
//打印结构体
printf("姓名 = %s\n", haha.xm);
printf("年龄 = %d\n", haha.nl);
printf("性别 = %s\n", haha.xb);
printf("学号 = %s\n", haha.xh);
}
结构体的⾃引⽤
在结构中包含⼀个类型为该结构本⾝的成员是否可以呢?
⽐如,定义⼀个链表的节点:
错误的⾃引⽤:
struct a
{
int data;
struct a p;
};
上述代码正确吗?如果正确,那 sizeof(struct Node) 是多少?
仔细分析,其实是不⾏的,因为⼀个结构体中再包含⼀个同类型的结构体变量,这样结构体变量的⼤
⼩就会⽆穷的⼤,是不合理的。
正确的自引⽤:
struct a
{
int data;
struct a *p;
};
结构体的特殊声明
在声明的时候可以不完全声明
//在上⾯代码的基础上,下⾯的代码合法吗?
p = &x;
编译器会把上⾯的两个声明当成完全不同的两个类型,所以是⾮法的。
匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使⽤⼀次。
结构体内存对⻬
当我们会了结构体的创建和声明
那结构体的⼤⼩是多少呢?
<