给结构体变量、数组赋初值 和一般变量、数组一样,结构体变量和数组也可以在定义的同时赋初值。
给结构体变量赋初值 所赋初值放在一对花括号中,如:
struct student
{
char name[12];
char sex;
struct date birthday;
float sc[4];
} std = {"Li Ming", ‘M’, 1997, 5, 10, 88.0, 76.0, 85.5, 90.0};
赋初值后,变量 std 内容如图所示:
name sex birthday sc[0] sc[1] sc[2] sc[3]
year month day
Li Ming | M | 1997 | 5 | 10 | 88.0 | 76.0 | 85.5 | 90.0 | 对结构体变量赋值时,C 编译程序按每个成员在结构中的顺序一一对应赋初值,不允许跳过前面的成员给后面的成员赋初值。但可以只给前面的若干成员赋初值,对后面未赋初值的成员,系统将自动为数值型和字符型数据赋初值0。
给结构体数组赋初值 由于数组中每个元素都是一个结构体,因此通常将其成员的值依次放在一对花括号中,以便区分各个元素。
struct bookcard
{
char num[5];
float money;
} bk[3] = { {"NO.1", 35.5}, {"NO.2", 25.0}, {"NO.3", 66.7} };
/* bk[0] bk[1] bk[2] */
也可以通过这种赋初值的方式,隐含确定结构体数组的大小。即:由编译程序根据所赋初值的成员个数决定数组元素的个数。以下是一个给二维数组赋初值的例子:
struct
{
char ch;
int i;
float x;
} arr[2][3] = {
{ {"a", 1, 3.0e10}, {"a", 2, 4.0e10}, {"a", 3, 5.0e10} }, /*第一行*/
{ {"b", 1, 6.0e10}, {"b", 2, 7.0e10}, {"b", 3, 8.0e10} } /*第二行*/
};
根据花括号的嵌套关系,可以清楚的分辨出所赋初值与数组元素一一对应的关系。
相同类型结构体变量之间的整体赋值 ANSI C 标准允许相同类型的结构体变量之间进行整体赋值。如:
struct
{
char name[10];
int num;
} per1, per2 = {"Jhon", 46};
执行赋值语句:per1 = per2; 则 per2 中每个成员的值都赋给了 per1 中对应的同名成员。这种赋值方法必须要保证赋值号两边结构体变量的类型相同。
|