自定义类型:结构体

⽬录:

  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;

还不能的

因为还没完成重命名

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

相关推荐
VekiSon39 分钟前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件
2的n次方_1 小时前
CANN Ascend C 编程语言深度解析:异构并行架构、显式存储层级与指令级精细化控制机制
c语言·开发语言·架构
_F_y2 小时前
C语言重点知识总结(含KMP详细讲解)
c语言·开发语言
郝学胜-神的一滴3 小时前
深入解析C/S模型下的TCP通信流程:从握手到挥手的技术之旅
linux·服务器·c语言·网络·网络协议·tcp/ip
island13144 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
Once_day5 小时前
C++之《程序员自我修养》读书总结(1)
c语言·开发语言·c++·程序员自我修养
坚果派·白晓明5 小时前
在鸿蒙设备上快速验证由lycium工具快速交叉编译的C/C++三方库
c语言·c++·harmonyos·鸿蒙·编程语言·openharmony·三方库
风指引着方向6 小时前
图编译优化全链路:CANN graph-engine 仓库技术拆解
c语言
C++ 老炮儿的技术栈7 小时前
VS2015 + Qt 实现图形化Hello World(详细步骤)
c语言·开发语言·c++·windows·qt