1.结构变量的定义
类型和变量是不同的概念,只能对变量进行赋值、存取或运算操作,而不能对一个类型进行这些操作。因此在声明了结构类型后,还需要定义结构变量,以便在程序中引用它。结构变量和其他变量一样,必须先定义后使用,定义方法有以下3种:
(1)先定义结构类型,再定义结构变量。如
struct books
{int bno;char bname[20],field[10],author[10],publisher[30];float price:
};
struct books bookl ,book2 ;
(2)定义结构类型的同时定义结构变量。如
struct books
{ int bno;char bname[20],field[10],author[10],publisher[30];float price ;
}bookl , book2 ;
(3)直接定义结构变量。如
struct
{ int bno;char bname[20],field[10],author[10],publisher[30];float price;
}bookl,book2;
方式(3)中由于省去了结构名,在此定义语句后面无法再定义这个类型的其他结构变量,除非把定义过程再写一遍。另外,以后如果再声明成员完全相同的结构类型,也和此次定义的结构类型属于不同的结构类型。若在上面的结构类型后面有语句“struct book3;”,则是错误的。同样下面的定义也是错误的:
struct
{ int m;float n;
}aa;
struct aa bb;
2.结构变量的初始化
同其他基本数据类型的变量一样,结构变量在定义的同时也可以进行初始化。结构变量初始化的一般形式是在定义变量的后面加上“=(初值表列);”,即在一对花括号中分别列出结构变量中各成员的初始值,各初始值之间用逗号隔开。
结构体初始化示例
#include<stdio.h>
int main( )
{ struct books /*结构类型*/{int bno;char bname[20],field[10],author[10],publisher[30];float price;
};
struct books bk1=(100l," c programming" ," computer" ," xuwei" ," renminyoudian press" , 39. 0};/*初始化*/printf( " bno =% d\ nbname =% s\ nfield =% s\ n", bkl. bno, bkl. bname,bk1. field);printf("author=%s\n" , bkl. author);printf("publisher= %s\nprice= %f\n" ,bkl.publisher,bkl. price);return 0;
}
下面讲解几个错误点
(1)对结构变量初始化时,需要按照其成员出现的顺序对每个成员依次赋值,不能跳过前面的成员给后面的成员赋值,例如下面的用法是错误的。
struct books bkl=(1002, ,"computer", ,"renminyoudian press" ,39. 0};
(2)不能在结构内部给成员赋初值,例如下面的用法是错误的。
struct books
{
int bno=1001;
char bname[20]="c programming" ;
char field[10]="computer" ;
}