自定义类型:结构体

⽬录:

  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;

还不能的

因为还没完成重命名

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

相关推荐
码界奇点3 小时前
Linux进程间通信三System V 共享内存完全指南原理系统调用与 C 封装实现
linux·c语言·网络·c++·ux·risc-v
..过云雨4 小时前
13.【Linux系统编程】从ELF格式深入理解动静态库
linux·c语言·c++·后端
智者知已应修善业5 小时前
【给定英文字符串统计最多小写最前输出】2023-2-27
c语言·开发语言·c++·经验分享·笔记·算法
无限进步_7 小时前
C语言atoi函数实现详解:从基础到优化
c语言·开发语言·c++·git·后端·github·visual studio
树在风中摇曳7 小时前
【C语言预处理器全解析】宏、条件编译、字符串化、拼接
c语言·算法
fashion 道格8 小时前
用 C 语言破解汉诺塔难题:递归思想的实战演练
c语言·算法
yuuki2332339 小时前
【数据结构】常见时间复杂度以及空间复杂度
c语言·数据结构·后端·算法
byte轻骑兵9 小时前
【安全函数】C语言安全字符串函数详解:告别缓冲区溢出的噩梦
c语言·安全·面试
玖剹10 小时前
穷举 VS 暴搜 VS 深搜 VS 回溯 VS 剪枝
c语言·c++·算法·深度优先·剪枝·深度优先遍历