一.建立结构声明
结构声明 structure declaration
struct book{
char title[20];
float value;
};
首先是关键字struct,它表明跟在其后的是一个结构,后面是一个可选的标记(例子中为book),在程序中使用该标记引用结构。在后面的程序中可以这样声明:
struct book library;
这把library声明为一个使用book结构布局的结构变量。
二.定义结构变量
在结构变量的声明中,struct book 所起的作用相当于一般声明中的int 或float。
struct book library;
是以下声明的简化:
struct book{
char title[20];
float value;
}library;
即声明结构的过程和定义结构的过程可以组合成一个步骤,也可以不使用结构标记(book),但是打算多次使用结构模板,就要用带标记的形式。
三.初始化结构
初始化一个结构变量与初始化数组的语法相似:
struct book library={
"fuck",
"love u",
1.95
};
即用一对花括号中括起来的初始化列表进行初始化,各初始化项用逗号分隔。为了让初始化项与结构中各成员的关联更加明显,我们让每个成员的初始化项独占一行,这样只是为了提高代码的可读性。
四.访问结构成员
使用结构成员运算符----点(.)访问结构中的成员。
就像library.value即访问libarary中的value部分。
虽然library是一个结构,但是library.value是一个float变量,可以像使用其他float变量那样使用它。例如scanf("%f",…)需要一个float类型变量的地址,而&library.value正好符合要求。.比&的优先级高,因此这个表达式和&(library.value)一样。
五.声明结构指针
struct guy {
char first[10];
char job[10];
float income;
};
声明结构指针:struct guy * him;
该声明并未创建一个新的结构,但是指针him现在可以指向现有的guy类型的结构。例如,如果barney是一个guy类型的结构变量,可以这样写:
him = &barney;
和数组不同的是,结构变量名并不是结构变量的地址,因此要在结构变量名前面加上&运算符。
六.用指针访问成员
最常用的方法:使用->运算符。有下面的关系
如果 him==&barney,那么him->income即是barney.income
如果him ==&fellow[0],那么him->income即是fellow[0].income
换句话说,指向结构的指针后面的->运算符和结构变量名后面的(.)运算符工作方式相同,不能写him.income,因为him不是结构名。
(.)运算符比运算符的优先级高
如果him == &fellow[0],那么him == fellow[0],可以以下替代
fellow[0].income==(*him).income;