自定义类型:结构体(1)

简介: 自定义类型:结构体(1)

1.结构体的声明

struct Stu
{
  char name[20];
  int  age;
  int  higt;
}stu;
 


关键词+结构体名字

{

结构体成员;

}结构体变量名;


2.结构体的初始化

结构体的初始化有两种:

   2.1按结构体成员顺序初始化
struct Stu
{
  char name[20];
  int  age;
  int  higt;
};
 
int main()
{
 struct Stu s1={ "xiaocheng",20,185};
 return 0;
}
 


2.2按指定的顺序初始化
struct Stu
{
  char name[20];
  int  age;
  int  higt;
};
 
int main()
{
 struct Stu s2={.age=20,.name="xiaocheng",.higt=185};
 return 0;
}
 


3.结合体的特殊声明

在声明结构体类型时候,可以不完全声明,也就是匿名结构体类型

struct 
{
  char name[20];
  int  age;
  int  higt;
}x;
 


上面的结构体声明中没有结构体标签,是匿名结构体。

下面有一个问题:

struct 
{
  char name[20];
  int  age;
  int  higt;
}x;
 
struct Stu
{
  char name[20];
  int  age;
  int  higt;
}*p;
 
p=&x;
 
 


上面代码是不合法的,编译器会把上面两个结构体当成两种不同的类型,会出现警告。

匿名的结构体类型创建之后,如果不重新进行命名,基本上只能用一次。


4.结构体的自引用

我们学习了结构体的创建和初始化之后,那么如果想要做到结构体引用结构体,类似递归的操作,要怎么做呢?

看下面一段代码是否可行:

struct Stu
{
  char name[20];
  int  age;
  int  higt;
  struct Stu next;
};
 


答案是不行的,上面代码中在结构中包含⼀个类型为该结构本身的成员,这样的话结构体的内存就会变的无穷大。

正确的自引用方式:

struct Stu
{
  char name[20];
  int  age;
  int  higt;
  struct Stu* next;
};
 
 


如果对匿名的结构体进行自引用的话可不可以呢?

首先对匿名结构体进行自引用时要先给它重新命名,看下面一段代码:

typedef struct 
{
  char name[20];
  int  age;
  int  higt;
  Stu* next;
}Stu;
 
 


这样其实也是不行的,因为c语言是一种编译型代码,是一行一行的往下面执行的,在对匿名结构体重命名为Stu之前就已经进行自引用了,所以是不可行的。

正确的解决方案就是:自引用就不要使用匿名结构体了。

目录
相关文章
|
缓存 监控 数据格式
信息系统架构模型(2) SOA
信息系统架构模型(2) SOA
277 0
|
运维 监控 安全
构建高效运维体系:从监控到自动化的全方位实践
本文深入探讨了构建高效运维体系的关键要素,从监控、日志管理、自动化工具、容器化与微服务架构、持续集成与持续部署(CI/CD)、虚拟化与云计算以及安全与合规等方面进行了全面阐述。通过引入先进的技术和方法,结合实际案例和项目经验,为读者提供了一套完整的运维解决方案,旨在帮助企业提升运维效率,降低运营成本,确保业务稳定运行。
阿里云商标注册入口(查询/申请/交易/管理)
阿里云商标注册页面、商标自助申请系统、商标近似查询、商标交易、商标管理后台、商标续展等操作入口
5577 5
阿里云商标注册入口(查询/申请/交易/管理)
|
IDE jenkins Java
告别繁琐配置:Alibaba Cloud Toolkit插件打破Jenkins自动化部署的局限
告别繁琐配置:Alibaba Cloud Toolkit插件打破Jenkins自动化部署的局限
737 0
|
存储 关系型数据库 MySQL
"揭秘!MySQL为何独宠B+树?跳表再牛,也敌不过这性能王者的N重诱惑!"
【8月更文挑战第11天】MySQL作为主流关系型数据库,优选B+树而非跳表作为索引结构,基于其对范围查询的支持、低磁盘I/O开销及事务处理能力。B+树叶节点构成有序链表,利于范围查询;较矮的树形结构减少了磁盘访问次数;支持多版本并发控制,保障事务ACID特性。而跳表在线性扫描范围查询时效率低,难以高效实现事务管理,且额外指针增加空间消耗。示例代码展示了B+树节点分裂过程,突显其内部机制。综上,B+树为MySQL提供了高性能、可靠的数据存储与检索能力。
295 4
|
存储 数据可视化 数据挖掘
分布式系列教程(28) -Linux环境安装Kibana
分布式系列教程(28) -Linux环境安装Kibana
309 0
|
Web App开发 移动开发 前端开发
|
存储 人工智能 搜索推荐
R语言Ternary包绘制三元图、RGB三色空间分布图的方法
R语言Ternary包绘制三元图、RGB三色空间分布图的方法
309 1
|
程序员 开发者
欢迎讨论--你见过哪些独特的代码注释
【5月更文挑战第11天】欢迎讨论--你见过哪些独特的代码注释
|
计算机视觉
将TIF图像格式转化为PNG或者JPG格式
安装好cv2库,如果没有安装,请使用pip install opencv-python进行安装。
392 0