自定义类型:结构体

⽬录:

  1. 结构体类型的声明
  2. 结构体变量的创建和初始化
  3. 结构成员访问操作符
  4. 结构体内存对⻬
  5. 结构体传参
  6. 结构体实现位段

1. 结构体类型的声明

. 结构体类型的声明
前⾯我们在学习操作符的时候,已经学习了结构体的知识,这⾥稍微复习⼀下。
1.1 结构体回顾
结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
1.1.1 结构的声明

cpp 复制代码
struct tag
{
member-list;
}variable-list;

例如描述⼀个学⽣:

cpp 复制代码
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
 char id[20];//学号
}; //分号不能丢

匿名结构体类型:

struct

{

char c;

int i;

double d;

}s;

int main()

{

return 0;

}

struct 匿名结构体类型把名字去掉,变量直接在}后创建:"s";

也可以初始化

cpp 复制代码
struct
{
    char c;
    int i;
    double d;
}s={'x',100,3.14};
int main()
{

    printf("%c %d %lf\n",s.c,s.i,s.d);
    return 0;
}

匿名结构体类型只能用一次;因为该结构没有名字

struct

{

char c;

int i;

double d;

}s;

struct

{

char c;

int i;

double d;

}*ps;

int main()

{

ps = &s;

return 0;

}

这样会报错,编译器会将上述两种声明当做完全不同的两个类型,所以是非法的

匿名结构体类型如果没对结构体进行重命名的话,基本只能使用一次

cpp 复制代码
typedef struct
{
	char c;
	int i;
	double d;
}S;




int main()
{
	S s;
	return 0;
}

意义不大

结构的自引用

数据结构:其实是数据在内存的存储和组织的结构

数据结构有多种,有的线性,树桩,图

线性:顺序表,链表,栈,队列

树形:二叉树

主要讲链表:

假设要在内存中存贮1 2 3 4 5

  1. 顺序表----数组

2.链表,每一份节点不仅携带数值还要有能力找到下一个数值

事实上还要有能力存放下一个节点相关的数据

那么对于链表节点的定义:

struct Node

{

int date;

struct Node n;

};

这样不合理。因为对于sizeof(struct Node)里边不仅包含date整形还包含一个跟他一样大的struct

后面无穷大

可以这样,存整形和下个节点的地址,最后一个存空指针

加上重命名

cpp 复制代码
typedef struct Node
{

int date;
struct Node* next;
}Node;

int main()
{
    Node s;
}

对于

能不能把struct搞到掉

typedef struct Node

{

int date;

Node* next;

}Node;

还不能的

因为还没完成重命名

同事匿名的结构体类型是不能完成结构体的自引用的

相关推荐
hqyjzsb39 分钟前
从爱好到专业:AI初学者如何跨越CAIE认证的理想与现实鸿沟
大数据·c语言·人工智能·信息可视化·职场和发展·excel·业界资讯
Felven1 小时前
C. Maximum Median
c语言·开发语言·算法
嘻嘻嘻开心3 小时前
C语言学习笔记
c语言·数据结构·算法
dddddppppp1233 小时前
c 模拟一个fat16文件系统
c语言·c++·算法
小刘爱玩单片机4 小时前
【stm32简单外设篇】- 三色LED
c语言·stm32·单片机·嵌入式硬件
hope_wisdom4 小时前
C/C++数据结构之队列基础
c语言·数据结构·c++·队列·queue
会员果汁5 小时前
算法-拓扑排序-C
c语言·开发语言·算法
Dillon Dong5 小时前
从C到Simulink:什么是MATLAB_MEX_FILE 宏,如何阻挡STM32 HAL 头文件
c语言·stm32·matlab
会员果汁6 小时前
算法-并查集-C
c语言·开发语言·算法
脏脏a7 小时前
链式存储范式下的二叉树:基础操作实现解析
c语言·数据结构·算法·二叉树