结构由数目固定的成员(又称域、项目或元素)构成,各成员可以具有不同的数据类型,包括基本类型和非基本类型。一个结构变量在内存占有片连续的存储空间, 但是, 因为各数据成员的类型不相同,所以具有特定的定义和访问形式。
结构体和其他类型基础数据类型一样,例如int类型、char类型,只不过结构体可以做成你想要的数据类型。以方便日后的使用。
结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。
定义结构
结构类型是用户自定义数据类型,以关键字struct标识。
定义结构类型的说明语句形式为:
struct 标识符
{ 类型 成员 1;
类型 成员 2;
…
类型 成员 n;
};
可以用不同方法定义一个结构变量
(1)声明类型后声明变量
struct employee
{ char name [ 10 ] ;
long code ;
double salary ;
char address [ 50 ] ;
char phone [ 20 ] ;
} ;employee worker1, worker2, *Emp ;
(2) 声明类型的同时声明变量
struct employee
{ char name [ 10 ] ;
long code ;
double salary ;
char address [ 50 ] ;
char phone [ 20 ] ;
} ;worker1, worker2, *Emp ;
(3) 直接声明结构类型变量
struct
{ char name [ 10 ] ;
long code ;
double salary ;
char address [ 50 ] ;
char phone [ 20 ] ;
} ;worker1, worker2, *Emp ;
访问结构
(1)访问结构变量的成员:结构变量 . 成员
# include <iostream>
using namespace std ;
struct weather // 声明结构类型
{ double temp; double wind; } ;
int main ( )
{ weather today ; // 声明结构类型变量
today . temp = 10.5 ; // 对结构变量成员赋值
today . wind = 3.1 ;
cout << “Temp = ” << today . temp << endl ; // 按成员输出
cout << “Wind = ” << today . wind << endl ;
}
(2)用指针访问结构变量的成员:
结构指针 -> 成员 或 (*结构指针 ) . 成员
# include <iostream>
using namespace std ;
# include <cstring>
struct person
{ char name[20] ; unsigned long id; double salary; } ;
int main ( )
{ person pr1 ;
person * pp ; // 定义结构指针
pp = & pr1 ; // 取结构变量地址
strcpy ( pp -> name , “David Marat” ) ; // 对结构成员赋值
pp -> id = 987654321 ;
pp -> salary = 335.0 ;
cout << pp -> name << ‘\t’ << pp -> id << ‘\t’ << pp -> salary << endl ;
}
例:
N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量,要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色。帽子的颜色用“red”,“blue”等字符串来表示。不同的小白鼠可以戴相同颜色的帽子。白鼠的重量用整数表示。
输入第一行为一个整数N,表示小白鼠的数目。 下面有N行,每行是一只白鼠的信息。第一个为不大于1000的正整数,表示白鼠的重量,;第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过10个字符。 注意:白鼠的重量各不相同。
输出
按照白鼠的重量从大到小的顺序输出白鼠的帽子颜色。
#include <iostream>
using namespace std;
struct white_mouse{
char color[11];
int weight;
};
int main(){
struct white_mouse *mouse,temp;
int N,i,j;
cin>>N;
mouse=new struct white_mouse[sizeof(struct white_mouse)*N];
for(i=0;i<N;i++)
cin>>mouse[i].weight>>mouse[i].color;
for(i=1;i<N;i++)
for(j=0;j<=N-i-1;j++)
if(mouse[j].weight<mouse[j+1].weight){
temp=mouse[j];
mouse[j]=mouse[j+1];
mouse[j+1]=temp;
}
for(i=0;i<N;i++)
cout<<mouse[i].color<<endl;;
delete []mouse;
return 0;
}