C语言 结构 基础
C语言使用结构变量(structure variable)进一步增强了表示数据的能力。
1.结构声明
例:struct book{
char title[MAXTITL];
char author[MAXAUTL];
float value;
};
- 该声明描述了一个由两个字符数组和一个float变量组成的结构。
- 首先使用关键字struct,它表示接下来是一个结构。后面是一个可选的标记(单词book),它是用来引用该结构的快速标记。
- 在结构声明中,接下来是一对花括号括起来的结构成员列表。每个成员变量都用它自己的声明来描述,用一个分号结束描述。每个成员可以是任何一种C语言数据类型,甚至可以是其他结构!
因此,以后我们就可以这样声明:
struct book library;//它把library声明为一个使用book结构设计的变量
2.定义结构变量
创建结构变量:
struct book library;
看到这条指令,编译器会创建一个变量library。 编译器使用book模板(结构声明
也叫做模板) 为该变量分配空间:一个具有MAXTITL个元素的char数组,一个具有
MAXAUTL个元素的char数组和一个float变量。这些存储空间是以一个名字library被
结合到一起的。
下图为存储空间分配图:
声明结构的过程和定义结构变量的过程可以被合并成一步,如下所示:
例:struct {
char title[MAXTITL];
char author[MAXAUTL];
float value;
}library;
3.访问结构成员
使用结构成员运算符点(.),例如library.value就是指library的value部分。
4.声明和初始化结构体指针
(1)声明
struct book *pointer;//这个声明不是建立一个新的结构,而是意味着指针pointer现在可以指向任
//何现有的book 类型的结构。
//例如,如果barney是book类型的结构,可以这样做:book=&barney;
//和数组不同,一个结构的名字不是该结构的地址,必须使用&符号。
- 这个声明不是建立一个新的结构,而是意味着指针pointer现在可以指向任何现有的book 类型的结构。
- 例如,如果barney是book类型的结构,可以这样做:book=&barney;
- 和数组不同,一个结构的名字不是该结构的地址,必须使用&符号。
(2)使用指针访问成员
- 使用运算符->
后跟->运算符的结构指针和后跟.(点)运算符的结构名是一样的,即pointer->value与library.value是一样的。pointer->title是一个float变量。 - 下列表达式是等价的:
library.value == (*pointer).value == pointer->value;//假设poniter == &library