#C04L10P01. C04.L10.结构体(一).结构体的语法知识
C04.L10.结构体(一).结构体的语法知识
在实际问题中,一组数据往往具有不同的数据类型。例如,人口大普查时,我们需要记录每一位公民的姓名,年龄,性别,住址,身份证号码。这些信息分别要用整型,字符型,字符串型来记录。为了解决问题,C++语言给出了另一种构造数据类型——“结构体”,它在数据存储方面相当于其他高级语言中的记录,但它有着面向对象的优势。
一、结构体定义和操作
1. 定义结构体及结构体变量
结构体变量的定义有两种方式:
定义结构体的同时定义结构体变量
struct 结构体名 { //其中 struct 是关键字
成员表 //可以有多个成员
成员函数 //可以有多个成员函数,也可以没有
} 结构体变量表; //可以同时定义多个结构体变量
结构体变量名列表的各个变量用“,”隔开。例如:
struct DATA{
int a[2]; //成员为一个数组
int c;
}data_a,data_b;
当然,我们也可以先定义结构体再定义结构体变量
struct 结构体名{
成员表
成员函数
};
结构体名 结构体变量表;//同样可以同时定义多个结构体变量
例如:
struct DATA{
int a[2];
int c;
};
DATA data_a,data_b;//这种定义方式与上一种方式的效果是相同的
在定义结构体变量时注意,结构体变量名和结构体名不能相同。在定义结构体时,系统对之不分配实际内存。只有定义结构体变量时,系统才为其分配内存。
2.成员调用
结构体变量与各个成员之间引用的一般形式为:
结构体变量名. 成员名
对于上面定义的结构体变量,我们可以这样操作:
cin>>data_a.a[0]>>data_a.a[1]; //一般情况下不能写 cin>>data_a;
int a=data_a.a[0]+data_a.a[1]; //就像用整形变量一样用a[0]、a[1]
data_b=data_a; //结构体之间的相互赋值是合法的
data_a.c=0; //就如同给整形变量赋值
实际上结构体成员的操作与该成员类型所具有的操作是一致的。
成员运算符“.”在存取成员数值时使用,其优先级最高,并具有左结合性。在处理包含结构体的结构体时,可记作:
strua. strub. membb
这说明结构体变量 strua 有结构体成员 strub;结构体变量 strub 有成员 membb。
3.成员函数调用
结构体成员函数调用的一般形式为:
结构体变量名. 成员函数
结构体成员函数默认将结构体变量作为引用参数。
二、结构体操作实例
现在,我们先定义一个简单的结构体,这个结构体将用来记录一个学生的大致情况,所以它的成员应该有学号、姓名、性别、年龄、成绩、家庭住址等。
#include<iostream>
using namespace std;
struct student{
int num; //学号
char name[21]; //姓名
char sex; //性别
int age; //年龄
float score; //成绩
char address[51]; //家庭住址
}; //此处不可忽略分号
struct student a,b;
int main()
{
cin>>a.num>>a.name>>a.sex>>a.age>>a.score>>a.address;
cin>>b.num>>b.name>>b.sex>>b.age>>b.score>>b.address;
cout<<a.num<<' '<<a.name<<' '<<a.sex<<' '<<a.age<<' '<<a.score<<' '<<a.address<<endl;
cout<<b.num<<' '<<b.name<<' '<<b.sex<<' '<<b.age<<' '<<b.score<<' '<<b.address<<endl;
return 0;
}
相关
在以下作业中: