结构声明
structure declaration描述了结构的组织布局,如下:
struct book {
char title[MAXTITLE];
char author[MAXAUTHOR];
float price;
};
结构声明并未创建结构实际的对象,只是描述了对象是由什么组成的,有时也称为模板,它描述出结构是怎么存储数据的,而book是作为该结构的标记,那么声明该结构变量可以使用book标记,这个book相当于结构的副名,所以我们可以定义一个结构变量:
struct book library;
当然,我们也可以定义一个结构指针:
struct book * ptbook;
初始化结构
我们可以这样初始化结构变量
struct book library = {
"abc",
"def",
0.13F
};
这样,是按照结构里各个属性声明顺序为它们初始化值的,
或者单独为结构book的各个属性独立赋值,
library.title = "abc";
//...
或者
使用结构的初始化器为结构初始化值:
struct book library = {
.title = "abc",
.author = "def",
.price = 0.13F
};
声明结构数组
声明结构数组和其他数据类型的数组类似,下面是一个声明结构数组的例子:
struct book libraries[MAXBOOKS];
libraries是声明内含MAXBOOKS个元素的数组,每个元素都是struct book类型的。
嵌套结构
在一个结构中包含另一个结构(即嵌套结构)很方便,比如:
struct names {
char first[LEN];
char last[LEN];
};
struct guy {
struct names name;
char job[LEN];
float income;
};
指向结构的指针
使用指针的几个理由:
- 第一、就像指向数组的指针比数组本身更容易操控(如,排序问题)一样,指向结构的指针通常比结构本身更容易操控;
- 第二、在一些早期的C实现中,结构不能作为参数传递给函数,但是可以传递指向结构的指针;
- 第三、即使能传递一个结构,传递指针通常更有效率;
- 第四、一些用于数据的结构中包含指向其他结构的指针。
声明和初始化结构指针
结构指针,如:
struct guy * ptguy;
如果你之前已经声明一个变量struct guy g,那么你可以给结构指针ptguy赋值:
ptguy = &g;
指针访问成员
第1种方法也是比较常用的方法:使用->运算符。
如果ptguy == &g,则可以ptguy->income,即是g.income
第2种方法,在指针和正常变量中,&和*是一对互逆运算符,则可以
如果ptguy == &g,则g.income == ptguy->income == (*ptguy).income
网友评论