结构体.结构体的语法知识

本文介绍了C++语言中的结构体,如何定义和操作,包括定义结构体和结构体变量、成员调用、成员函数调用。通过实例展示了如何记录学生信息,如学号、姓名等。
摘要由CSDN通过智能技术生成

在实际问题中,一组数据往往具有不同的数据类型。例如,人口大普查时,我们需要记录每一位公民的姓名,年龄,性别,住址,身份证号码。这些信息分别要用整型,字符型,字符串型来记录。为了解决问题,C++语言给出了另一种构造数据类型——“结构体”,它在数据存储方面相当于其他高级语言中的记录,但它有着面向对象的优势。

一、结构体定义和操作

1. 定义结构体及结构体变量

结构体变量的定义有两种方式:

定义结构体的同时定义结构体变量

struct 结构体名 {  //其中 struct 是关键字
	成员表   //可以有多个成员
	成员函数  //可以有多个成员函数,也可以没有
} 结构体变量表; //可以同时定义多个结构体变量

Copy

结构体变量名列表的各个变量用“,”隔开。例如:

struct DATA{
	int a[2];     //成员为一个数组
	int c;      
}data_a,data_b;

Copy

当然,我们也可以先定义结构体再定义结构体变量

struct 结构体名{
	成员表
	成员函数
};

结构体名  结构体变量表;//同样可以同时定义多个结构体变量

Copy

例如:

struct DATA{
	int a[2];                      
	int c;      
};
DATA data_a,data_b;//这种定义方式与上一种方式的效果是相同的

Copy

在定义结构体变量时注意,结构体变量名和结构体名不能相同。在定义结构体时,系统对之不分配实际内存。只有定义结构体变量时,系统才为其分配内存。

2.成员调用

结构体变量与各个成员之间引用的一般形式为:

结构体变量名. 成员名

Copy

对于上面定义的结构体变量,我们可以这样操作:

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;       //就如同给整形变量赋值

Copy

实际上结构体成员的操作与该成员类型所具有的操作是一致的。

成员运算符“.”在存取成员数值时使用,其优先级最高,并具有左结合性。在处理包含结构体的结构体时,可记作:

strua. strub. membb

Copy

这说明结构体变量 strua 有结构体成员 strub;结构体变量 strub 有成员 membb。

3.成员函数调用

结构体成员函数调用的一般形式为:

结构体变量名. 成员函数  

Copy

结构体成员函数默认将结构体变量作为引用参数。

二、结构体操作实例

现在,我们先定义一个简单的结构体,这个结构体将用来记录一个学生的大致情况,所以它的成员应该有学号、姓名、性别、年龄、成绩、家庭住址等。

#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;
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值