《C和指针》第十章-结构和联合 学习笔记

一、结构体基础知识

1、 结构体的声明和创建

(1).下面这个声明创建了一个名叫x的变量,它包含三个成员:一个整数、一个字符和一个浮点数。

struct {
	int a;
	char b;
	float c;
} x;

(2).这个声明创建了y和z。y是一个数组,它包含了20个结构。z是一个指针,它指向这个类型的结构。

struct {
	int a;
	char b;
	float c;
} y[20] , *z;

(3).这个声明把标签SIMPLE和这个成员列表联系在一起。该声明并没有提供变量列表,所以它并未创建任何变量。

struct SIMPLE {
	int a;
	char b;
	float c;
};

这些声明使用标签来创建变量。

struct SIMPLE x;
struct SIMPLE y[20],*z;

(4).这个和声明一个结构标签的效果几乎相同。区别在于Simple现在是个类型名而不是个结构标签。

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

后续的声明可能像下面这个样子。

Simple x;
Simple y[20],*z;
2、结构体成员

可以在一个结构体外部声明的任何变量都可以作为结构的成员,尤其是,结构成员可以是标量、数组、指针甚至是其他结构。

3、结构体成员的直接访问

结构体变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数,左操作数就是结构体变量的名字,有操作数就是需要访问的成员的名字。这个表达式的结果就是指定的成员。点操作符的结合性是从左往右

4.结构体成员的间接访问

使用箭头操作符->,箭头操作符接受两个操作数,但左操作数必须是一个指向结构体的指针,右操作数选择一个指定的结构体成员。

5.结构体的自引用
struct SELF_REF1 {
	int a;
	struct SELF_REF1 b;
	int c;
};

这种类型的自引用是非法的,因为成员b是另一个完整的结构体,其内部还将包含它自己的成员b。这第2个成员又是另一个完整的结构体,它还将包括它自己的成员b。这样重复下去永无止境。

struct SELF_REF2{
	int a;
	struct SELF_REF2 *b;
	int c;
};

这个声明和前面那个声明的区别在于b现在是一个指针而不是结构体。编译器在结构体的长度确定之前就已经知道指针的长度,所以这种类型的自引用是合法的。

6、不完整的声明

如果咩个结构体都引用了其他结构的标签,哪个结构体应该首先声明呢?
使用不完整声明

7、结构体的初始化

一个位于一对花括号内部、由逗号分隔的初始值列表可用于结构体各个成员的初始化,这些值根据结构成员列表的顺序写出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值