目录
备注:如果看过《计算机科学导论》的数据结构:记录,可以轻松理解结构体
0.摘抄:《计算机科学导论》的数据结构:记录
1.定义
由一批数据组合而成的结构型数据
2.作用
描述复杂对象,创建新的类型
3.两种主流格式
第一种
struct 结构体标签
{
成员列表;
}变量列表(全局变量);//变量列表可以不写,但;必须有!!!
变量列表;可以是1个或多个:如s1;或s2,s3,s4;
当然也可以另起几行来写,但变量类型不同
//下方的s1~s5是局部变量
struct 结构体标签 s1;
struct 结构体标签 s2;
struct 结构体标签 s3;
struct 结构体标签 s4;
struct 结构体标签 s5;
介绍点操作符(.)用于结构体成员的直接访问
用法:结构体变量.成员变量
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
struct hotalcard
{//描述hotalcard的信息
char name[10];
int age;
char deadline[10];
};//分号要写!!!
int main()
{
struct hotalcard s = { "名字",20,"2024.7.2" };//从左向右依次录入成员变量的信息:结构体的创建和初始化
//如果想乱序,要写".名称=":
//struct hotalcard s = {.deadline="2024.7.2", .name="名字", .age=20 };
printf("%s %d %s", s.name, s.age, s.deadline);//格式:结构体变量.成员变量
return 0;
}
注:结构体本质上是数组,因此s.name、s.age、s.deadline 相当于 s[name]、s[age]、s[deadline]
将字符串存储到变量中用字符数组char name[10];
第二种 利用typedef重定义
typedef 原类型名
{
//......
}新类型名;
或
struct 原类型名
{
//......
};
typedef struct 原类型名 新类型名;
原类型名等价为新类型名
例如
typedef int SLDataType;
typedef struct Seqlist
{
SLDataType* a;
int size;
int capacity;
}SL;
注:结构体的类型为struct SeqList(struct必须写)
SL等价为struct Seqlist
写成下面这样是错误的
typedef struct Seqlist
{
Seqlist* next;//Seqlist不是结构体的类型,要写成 struct Seqlist* next;
}SL;
同理,下面这样的写法也是错误的
typedef struct Seqlist
{
SL* next;
}SL;
在结构体的下方写关于SL的语句才起作用 (语法原因:向上查找)
4.结构体嵌套
struct a
{
int b;
char c;
};
struct d
{
struct a;
int e;
}
int main()
{
struct d f={{10,"test"},20};//{10,"test"}表示struct a
printf("%d",f.a.b);//打印10
}