1.
声明结构体的方式有两种:一种是在结构定义的后面加上一个或多个变量名,如下所示:
struct s1
{
int x
;
int y
;
}first
,second;
另一种方法是将定义和声明分开。如下:
struct s1
{
int x
;
int y
;
}
;
struct s1 first ,second;
2.
结构可以使用简单的复制语句在同类型的结构之间复制信息。继续前面的例子,语句:
first=second
;
与下面语句等价:
first.x=second.x;
first.y=second.y;
当程序使用了包含很多成员复制结构时,这种表示法可以节省大量的时间。
3.
初始化结构:与其它变量一样,也可以在声明结构时对它进行初始化,方式与初始化数组类似;在结构声明的后面加上等号和一个初始化值列表(用花括号括起,其中的值用逗号隔开)。也可以初始化结构数组,提供的数组将被依次赋值给数组中的结构。
4.
可以将指针作为结构的成员。 将char数组和char指针作为结构成员之间的区别:如果定义了一个包含char数组的结构,则该结构类型的每个实例都包含了用于Cincinnati指定长度的数组的存储空间,存储的字符串不能超过指定的长度。但如果定义了一个包含char指针的结构,则不存在上述限制,这种指针的每个实例都只包含用与存储指针的空间实际的字符串将存储在内存的其它地方,既没有长度限制,也不会浪费空间。实际的字符串没有存储在结构中,结构中的每个指针都可以指向任意长度的字符串。
5.
创建指向结构的指针后如何使用结构对象:一种方法是使用间接运算符(*)。另一种通过指针来存取结构成员的方法是使用间接成员运算符(->),该运算符用于连接指针名和成员名。如果p_str是指向结构str的指针,则下面的三个表达式是等价的:
str.memb
(*p_str).memb
p_str->memb
6.
可以将指针和结构数组合起来使用,通过指针来存取数组中的结构元素。
通过指针递增来存取后续元素实例:
#include <stdio.h>
#define MAX 4
/* Define a structure, then declare and initialize */
/* an array of 4 structures. */
struct part {
short number;
char name[10];
} data[MAX] = {1, "Smith",
2, "Jones",
3, "Adams",
4, "Wilson"
};
/* Declare a pointer to type part, and a counter variable. */
struct part *p_part;
int count;
int main( void )
{
/* Initialize the pointer to the first array element. */
p_part = data;
/* Loop through the array, incrementing the pointer */
/* with each iteration. */
for (count = 0; count < MAX; count++)
{
printf("At address %d: %d %s/n", p_part, p_part->number,
p_part->name);
p_part++;
}
return 0;
}
指针递增时,增加的量为它指向数据对象的长度。在本例中,指针p_part增加的量为对象patr结构的长度,为12。
7.
共用体类似于结构,其声明和使用与结构相同。共用体和结构体之间的区别在于,同一时间内,只有一个成员可用。原因很简单,共用体的所有成员占用的是同一个内存区域——它们相互覆盖。
8.
可以使用关键字typedef给结构体或共用体类型创建别名。如:
typedef struct{
int x
;
int y
;
}coord;
然后,便可以使用标识符coord来声明这种结构的实例:coord top,left;
没使用typedef时声明是必须加上关键字struct,使用了就无需包含关键字。