设计程序最重要的一个步骤就是选择一个表示数据的好方法。在多数情况下,使用简单的变量或数组都是不够的。C结构变量(structure variable)进一步增强了表示数据的能力。C的结构的基本形式就足以灵活地表示多种数据,并且它还使你能够创建新的形式。如果你熟悉Pascal语言的“记录”的话。你对C的结构就不会陌生了。
现今常用的有struct ,union ,enum三种数据类型。
结构的声明(structure declaration)是描术结构如何组合的主要方法。如下:
struct book{
char *title;
char *author;
float value;
};
这样的一个声明描述了一个由两个cahr型指针的变量和一个float型的变量。它并没有创建实际的数据对象,而是描述了组成这类对象的元素(它就如同一个模版一样)。你可以用关键字struct,表示接下来的一个结构。
struct book library; //这里的library声明为一个使用book结构设计的结构变量,这时就创建了数据对象,并为结构library分配了结构所需要的内存空间。这里的book只表示一种数据类型而已,在同一个程序中还可以声明其它的结构变量。如:
struct book diskbook;
同样可以同时定义多个结构变量,甚至可以定义一个指向该结构的指针。如:
struct book pansh,*ptbook;
这个里的每一个结构变量均包含 title, author和value部分。
你也可以这样声明:
struct book{
char * title;
char * author;
float value;
}library; /*在定义这后跟变量名*/
即:声明结构的过程和定义结构变量的过程合并成一步。还有一种情况就是无需标记的情况。如:
struct { /*无标记*/
char * title;
char * author;
float value;
}library;
这种情况不能够多次使用一个结构模版。如果你想多次使用一个结构模版,就需要使用带有标记的形式;或者使用typedef方法。
初始化结构
如:
struct book library{
"C language",
"Renee Vivotte",
1.38
};
如里想只初始化其中的一部分要如何实现呢?请看最后。
注意:初始化要用大括号括起来,每个项目用逗号分隔,并且要与结构成员类型相匹配。
现在说了半天只是说的如何申明一个结构,现在说说如何使用它。
结构就像是一个“超级数组”,数组是使用每个元素的标号元素进行访问,那么结构的各个成员要如何访问呢?
我们可以用一个结构运算符点(.)。如:
library.value就是指library中的value元素。所以你可以这样使用它:
scanf("%f",&library.value); /*这里的.比&拥有更高的优先级*/
gets (library.author);
如里想只初始化其中的一部分,你可以这样做:
struct book library ={ /*注意这里的等号*/
.value = 25.99, /*这里同样用逗号分隔*/
.author = "Stallman"
};
即:指定初始化元素的初始值。
对特定成员的最后一次赋值是它实际获得的值。如:
struct book library = {
.value = 25.99,
.author = "Stallman",
0.38
}
value 得到的值是最后一次赋给value的值。即: value 的值是0.38