1.结构是由不同数据类型的数据组成的集合体。
2.结构由数目固定的成员构成。
3.各成员可以具有不同的数据类型。
4.一个结构变量在内存占有一片连续的存储空间。
(一) 结构类型定义形式:
struct 标识符
{类型 成员1;
类型 成员2;
……
类型 成员n;
};
例:
struct contact
{
int id;
char name[16];
char phone[16];
};
contact a=
{
202001 //int 初始化;
"Jack" //char 初始化;
"123456789"
};
注:
初始化时必须要对应顺序。
(二) 结构体的访问:
1.结构变量成员的访问
#include <iostream>
#include <cstring>
using namespace std;
struct contact
{
int id;
char name[16];
char phone[16];
};
int main()
{
contact a;
a.id = 202001; //通过使用.来访问结构体中的成员
strcpy(a.name,"Jack");
strcpy(a.phone,"123456789");
cout <<a.name<<endl; //输出name
cout <<a.phone<<endl; //输出phone
return 0;
}
2.用指针访问结构变量的成员
结构指针->成员 (更常用)
或(*结构指针).成员
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=1234556;
pp->salary=3233;
}
3.类型相同的结构变量可以整体赋值
“类型相同的变量”是指用同一类型标识符说明的变量
struct weather1
{double temp; double wind;}yesterday;
struct weather2
{double temp; double wind;}today;
yesterday和today不为同一类型变量,所以不可以整体赋值
举个栗子
对候选人得票的统计程序。
设有3个候选人,最终只能有1人当选。今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后输出这3个候选人的得票结果。
解题思路:
总共有10个人参加投票,那么可以利用结构体来表示每次一个人投票时的结果。
源代码:
#include <iostream>
#include <cstring>
using namespace std;
struct person
{
char name[20];
int count;
};
int main()
{
person leader[3]={"Li",0,"Zhang",0,"Fun",0}; //定义person类型的数组,内容为3个候选人的姓名和当前的得票数
int i,j;
char leader_name[20]; //leader_name为投票人所选的人的姓名
for(i=0;i<10;i++)
{
cin>>leader_name; //输入10张票上所写的姓名
for(j=0;j<3;j++) //将票上姓名与3个候选人姓名比较
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++; //如果与某一候选人的姓名相同,就给他加一票
}
cout <<endl;
for(i=0;i<3;i++) //输出3个候选人的姓名与最后得票数
{
cout<<leader[i].name<<":"<<leader[i].count<<endl;
}
return 0;
}