`

c++结构体

阅读更多

为了有好看的字体改变了格式……

 

结构体

在c++中结构体的定义及声明格式如下:

 

struct 结构体名

{

   数据类型  成员名1;

   数据类型  成员名2;

   .

   .

   .

   数据类型  成员名n;

};

下面是一个结构体定义的实例:

 

 

struct student{

     int num;

     char name[10];

     int age;

     float score;

     char addr[30];

}

  

 

c++中的结构体类似于Java中的类,所以上面的代码只是指定了一个结构体类型,它相当于一个模型,其中并无具体数据,系统对之也不分配实际内存单元。为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。可以采取以下三种方法定义结构体类型变量:

1.先声明结构体类型,后定义结构体变量。例如:

      

   struct student student1,student2;

 

 2.定义结构体类型的同时定义结构体变量。

 

 

struct student{

     int num;

     char name[10];

     int age;

     float score;

     char addr[30];

}x,y;

 

 3.定义无名称的结构体类型的同时定义结构体变量。

 

 

struct     /*定义结构体类型,但省略了类型名*/

{

     int num;

     char name[10];

     int age;

     float score;

     char addr[30];

}x,y;

 

 不过使用这种方式,以后将无法使用这种结构体类型来定义其他变量。

 

 

结构体变量的初始化

结构体变量和其它变量一样,在定义结构体变量的同时进行初始化。例如:

 

#include<iostream>

using namespce std;

int main(){

     struct student{

          int num;

          char name[10];

          int age;

          float score;

          char addr[30];

     }x={8001,"zhang qu",19,97.5,"shanghai"};

     cout<<"NO:"<<x.num<<endl<<"Name:"<<x.name<<endl;

     cout<<"Age:"<<x.age<<endl;

     cout<<"Score:"<<x.score<<endl<<"Addr:"<<x.addr;

}

 

运行结果如下:

NO:8001

Name:zhang qu

Age:19

Score:97.5

Addr:shanghai

 

 结构体数组

结构体数组的定义和一般的结构图变量定义相似,在声明结构体数组变量时,只要加上数组的方括号([])即可。例如:

 

struct student{

      int num;

      char name[20];

      char sex;

      float score[3];

}

struct student s[3]={{8001,"zhang qu",'m'{80,86,92}},

                     {8002,"wang hai",'m'{88,76,94}},

                     {8003,"wang yan",'f'{90,96,82}}};

 

 结构体数组元素成员的引用格式如下:

         结构体数组名[下标].成员名

 

结构体指针

一个结构体变量的指针就是该结构体变量所占据的内存段的起始地址。

指向结构体变量的指针定义的一般形式为

 

struct 类型名 *指针名;

 

 例如:

struct data *p,data1;

p=&data1;

 

 是指针p指向结构体变量data1.

 

通过指向结构体的指针引用结构体成员的表示方法为:

  指针->结构体成员名

"*指针"表示指针所指对象,所以也可以用这种方式通过指向结构体的指针引用结构体成员:

(*指针).结构体成员名

这里圆括号是必须的,因为运算符" * "的优先级低于运算符" . "。

 

内存动态管理函数

1.malloc函数

其函数原型为

void *malloc(unsigned int size);

 它的函数值为指针,即地址,这个指针是指向void类型的,也就是不规定指向任何具体的类型。

 

其作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是一个指向分配域起始地址的指针。

2.calloc函数

其函数原型为

void *calloc(unsigned int n;unsigned int size);

 其作用是在内存的动态存储区中分配n个长度为size的连续空间。

3.free函数

其函数原型为

void free(void *p);

 

 枚举类型

 所谓枚举,是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。枚举类型定义的一般形式为:

 

enum 枚举类型名{标识符1,标识符2,……标识符n};

 

 例如,定义一个枚举类型和枚举变量如下:

enum colorname{red,yellow,green,blue,black};

enum colorname color,color_1;

color=red;

color_1=blue;

 

 当然也可以直接定义枚举变量,例如:

enum colorname{red,yellow,green,blue,black}color,color_1;

 

 【说明】

1.枚举类型不是变量,不能改变其值。例如,下面的赋值是错误的:

red=0;

yellow=1;

 

 当枚举类型它们是有值的,C语言编译按定义时的顺序使它们的值为0,1,2,……。这个值是可以输出的。

也可以像这样改变枚举元素的值,例如:

enum colorname{red=5,yellow=1,green,blue,black};

 定义red为5,yellow为1,以后顺序加一,black为4.

 

2.枚举元素的值可以用来做判断比较。例如:

if(color==red)

if(color<yellow)

 

 3.一个整数不能直接赋给一个枚举变量。因为它们属于不同的类型,应先进行强制类型转换才能赋值。例如:

color=(enum colorname)2;

 

用typedef定义

1.进行简单的名字替换

typedef int INTEGER;

typedef float REAL;

 

 2.用一个类型名代替一个结构体类型

typedef struct{

    int num;

    char name[20];

    float score;

}STUDENT;

 

 此时STUDENT表示一个结构体类型的名字,可以用STUDENT来定义此结构体类型的变量。

3.进行数组类型定义

 

typedef int COUNT[20];

COUNT x,y;

 

 此处定义了COUNT为整型数组类型,x、y为整型数组类型COUNT变量,且各有20个数组元素。

 4.进行数组类型定义

 

typedef char *STRING;

STRING p1,p2,p[10];

 

 

愿所有预备程序员好好学习,天天向上!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics