今天在看《深入浅出MFC》时,看到了一个结构体的问题甚是不解,写法为:
Struct MSGMAP_ENTRY _messageEntries[]=
{
WM_CREATE,OnCreate,
WM_PAINT, OnPaint,
WM_SIZE, OnSize,
WM_COMMAND,OnCommand,
};
注意:MSGMAP_ENTRY是个结构体,有两个成员,UNIT nMessage和LONG(*pfn)(HWND,UNIT,WPARAM,LPARAM)
看到这种写法,顿时很蛋疼,不知道这是定义结构体啊,还是赋初值,如果是定义结构体的话,后面怎么是赋的值呢,所以第一感觉是赋初值,这是定义了一个MSGMAP_ENTRY类型的数组。看来是定义结构体数组的时候,struct是可以省略的。
下面是在VC++6.0中的测试
随意定义一个结构体
struct aaa
{
int a;
int b;
int c;
};
然后是赋值,
aaa a[3]={1,1,1,1,1,1,1,1,1};
struct aaa b[]={2,2,2,2,2,2,2,2,2};
经调试查看,这两个都是成功的。
所以结论是,在定义结构体数组时,可以写struct
下面是对结构体的定义和赋值在网上找的资料,就当是复习基础了,写在下面。
不要误认为凡是结构体类型都有相同的结构。实际上,每一种结构体类型都有自己的结构,可以定义出许多种具体的结构体类型。
类型与变量是不同的概念,不要混淆。只能对结构体变量中的成员赋值,而不能对结构体类型赋值。在编译时,是不会为类型分配空间的,只为变量分配空间。
对结构体中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。关于对成员的引用方法见7.3节。
成员也可以是一个结构体变量。如:
struct Date //声明一个结构体类型Date
{
int month;
int day;
int year;
};
struct Student
//声明一个结构体类型Student
{
int num;
char name[20];
char sex;
int age;
Date birthday;
char addr[30];
}student1,student2;
//定义student1和student2为结构体类型Student的变量Student的结构见图7.3所示。图7.3
结构体中的成员名可以与程序中的变量名相同,但二者没有关系。例如,程序中可以另定义一个整型变量num,它与student中的num是两回事,互不影响。
结构体变量的初始化
和其他类型变量一样,对结构体变量可以在定义时指定初始值。如
struct Student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1={10001,"ZhangXin",'M',19,90.5,"Shanghai"};
这样,变量student1中的数据如图7.2中所示。也可以采取声明类型与定义变量分开的形式,在定义变量时进行初始化:
student2= student1;