C++结构体类型的定义和初始化

今天在看《深入浅出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;

 

你可能感兴趣的:(C++,Date,struct,command,mfc)