C++中的结构体自定义数据类型(struct)解析



C++中的结构体自定义数据类型(struct)解析,结构体的定义和操作实例教程。结构体的应用代码。如何理解c++结构体数据类型。在实际的应用中,一组数据往往具有不同的数据类型。例如一位公民具有年龄、姓名、性别、住址、身份证号码等。这些信息分别要用整型、字符型、字符串类型记录。为了解决这个问题,c++语言给出了另一种构造数据类型,也就是结构体,它在数据存储方面相当于高级语言中的记录,但又有面向对象的优势。

c++自定义数据类型

一、结构体类型

1、   C++中定义一组包含多个类型不同(也有相同的)的数据类型,称为结构体。

2、   结构体的声明符号:struct。

3、   c++结构体的形式:struct 结构体类型名{成员表列};

4、   结构体类型名是结构体类型的标志。

5、   结构体中每个成员叫做结构体中的一个域。成员表列称作为域表。

6、   一般在文件的开头声明结构体类型,在函数之前。

7、   因为C++拥有类类型,通常不需要使用带函数的结构体。

二、c++结构体类型变量的定义方法以及初始化

1、   c++定义结构体类型变量的方法:

声明结构体类型然后定义变量名,格式如下:

结构体类型名     结构体变量名

Student            student1;

在C语言中结构体类型名前面要添加关键字struct

C++中可省

Student1中具有Student中同样的属性

在声明类型的同时定义变量

常见的形式:

struct 结构体名

     成员表列

    }变量名表列;

 直接定义结构体类型变量

实例:

struct           //没有结构体类型名

 {

     成员表列

  }变量名表列;    

这种方式很少使用。提倡先定义类型后定义变量的第1种方法.

 

注意:

不是所有的结构体类型都有相同的结构。 类型与变量是不同的概念,只能对结构体变量中的成员赋值,不能对结构体类型赋值。在编译时,不会对类型分配空间,只为变量分配空间。 结构体中的成员可以单独使用,它的作用与地位相当于普通变量。成员也可以是一个结构体变量。

  #include<iostream>

 usingnamespace std;

 struct Date   //声明一个结构体类型Date

 {

  int month;

   int day;

  int year;

 };

struct Student  //声明一个结构体类型Student

 {

  int num;

 char name[20];

 char sex;

 int age;

Datebirthday;  //Date是结构体类型,birthday是Date类型的成员

  char addr[30];

}student1={},student2;//定义student1和student2为结构体类型Student的变量

先声明了一个Date类型,具有三个成员month,day,year。然后声明Student类型,将成员birthday指定为Date类型,即birthday作为Date结构体类型名的结构体变量,具有month,day,year三个属性。

结构体中的成员名可以与程序中的变量名相同,但二者没有关系,互不影响。

三、结构体变量的引用

1、可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。

Student1=Student2;

2、   可以引用一个结构体变量中的一个成员的值。

Student1.num=1000;

3、   如果成员本身也是一个结构体类型,则要用若干个成员运算符,一级一级找到最低一级的成员。

例如;student1.birthday.month(引用结构体student1中的birthday中的month成员)

4、   不能将一个结构体变量作为一个整体进行输入和输出。

不能:cout<<student1;只能对各个成员分别输入和输出;


5、   对结构体变量的成员可以像普通变量一样进行各种运算。

例如:student2.score=student1.score;

sum=student1.score+student2.score;

student1.age++;

++student1.age

6、   可以引用结构体变量成员的地址,也可以引用结构体变量的地址。

例如;cout<<&student1;  //输出student1的首地址

cout<<&student1.age;//输出student1.age的地址

结构体变量的地址主要用作函数参数,将结构体变量的地址传递给形参。

 

三、结构体数组

1、   结构体数组和其他数值型数组的不同之处在于:每个数组元素都是一个结构体类型的数组,他们都分别包含各个成员项。

2、   结构体数组就是用数组的形式保存复制多个结构体变量,不用在定义结构体后声明无数的变量实体。

3、   关于初始化:在声明结构体数组的时候可以对其进行初始化,数据类型必须对应,和普通数组初始化的模式一样,不确定数组长度的时候可以不写数组长度直接声明初始化。

四、结构体数组应用

对候选人得票的统计程序。设有三个候选人,最终只有一个人当选为领导。今有十个人参加投票,从键盘先后输入这十个人所投的候选人名字,要求最后输出这三个候选人的得票结果。

解析:这个题可以定义一个候选人结构体数组,包含3个元素,在每个元素中存放有关的数据。

实现程序如下:

 

/*

* newtest.cpp

*

*  Created on: 2012-4-8

*      Author: David

*/

 

#include <iostream>

/*

* 声明结构体类型Person

* 拥有name数组和count整型变量

* */

struct Person

{

char name[20];

int count;

};

 

int main()

{

//定义Person类型的数组,内容为三个候选人的姓名和当前的票数

Person leader[3]={“li“,0,”zhang“,0,”fun”,0};

int i,j;

char leader_name[20]; //leader_name为投票人所选的人的姓名

for(i=0;i<10;i++)

{

cin>>leader_name;

for(j=0;j<3;j++)

{

if(strcmp(leader_name,leader[j].name)==0)

{

//如果与一个候选人的姓名相同,就给他加一票

leader[j].count++;

}

}

cout<<endl;

for(i=0;i<3;i++)

{

cout<<leader[i].name<<”;”<<leader[i].count<<endl;

}

return 0;

}

}