首页 > 其他 > 详细

第10章:结构和联合

时间:2021-05-02 16:47:26      阅读:19      评论:0      收藏:0      [点我收藏+]

10.1 结构基础知识

  聚合数据类型能够同时存储超过一个的单独数据。C语言中有两种aggregate data type:数组和结构

10.1.1 结构声明

  在声明结构时,必须列出它包含的所有成员,包括每个成员的类型和名字。

语法:struct tag{member - list}variable-list;

技术分享图片

 

 

 后面的variable-list是用来创建变量的。

上面的创建方式也可以写成这样:

技术分享图片

 

 

技术分享图片

 

 

 

 创建结构还有一种更好的技巧:用typedef定义

typedef struct{
    int a;
    char b;
    float c;
} Simple;

这个方法与上面的效果几乎一模一样,区别仅仅在于现在Simple是一个结构类型名称而不是一个结构标签。后续的声明只需要 Simple x;与java的对象创建相同

10.1.2 结构成员

  结构成员可以使标量数组指针甚至是其他结构

技术分享图片

10.1.3 结构成员的直接访问

结构变量的成员是通过点操作符(.)访问的,这点和java的对象引用一致。

点操作符和下表引用具有相同的优先级,他们的结合性都是从左向右。

10.1.4 结构成员的间接访问

  假设我们现在有一个指向结构的指针(struct simple *c),我们该如何访问这个结构的成员呢?

一种方法是(*c).f 

但是c语言提供了一种更为方便的操作符:->.于是上面的表达式可以写为c ->f .

10.1.5 结构的自引用

在结构的内部不可以包含这个结构的本身。这点与面向对象语言有巨大差别

struct SELF_REF1 {
     int a ;
     struct SELF_REF1;      
}  ;

类似这样的引用是非法的,但是下面这种引用却是合法的.

struct tree{
      int a;
      struct tree *node;

};

这种结构里面包括自身结构的指针被应用到链表和树等数据结构中,

10.1.6 不完整的声明

  设想一下我们要声明一些相互之间存在依赖的结构。也就是说一个结构包含了另一个的成员。但是这些结构声明的顺序该怎么定义呢?这时候我们就需要用到不完整的声明,这种方法和函数的声明类似。

技术分享图片

 

10.1.7 结构的初始化

  结构的初始化和数组的初始化很相似,由位于一对花括号内部,由逗号分割的初始值列表可用于结构各个成员的初始化。

技术分享图片

技术分享图片

 

第10章:结构和联合

原文:https://www.cnblogs.com/JasonJ/p/14725807.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!