自定义数据类型——结构类型

C++中自定义数据类型还有一种称为结构类型,并且把该类型的各种数据类型一一整合到其中。

学号 —— 类型
姓名 ——字符串
学生 年龄——整型
院系——字符串
平均成绩——浮点型

每个学生的信息成为了一个整体,杂乱的数据和每个学生一一对应了起来,方便管理。
如果需要创建学生类型,就可以这样写。

#include <iostream>
using namespace std;
struct student
{
     int  idNumber;
     char  name[15];
     int  age;
     char  department[20];
     float gpa;
};
//这样有了新的名为student数据类型。
int main()
{
	student s1, s2;
	cout << "请输入学号:";
	cin >> s1.idNumber;
	cout << "输入姓名:";
	cin >> s1.name;
	cout << "输入年龄";
	cin >> s1.age;
	cout << "输入院系";
	cin >> s1.department;
	cout << "输入成绩";
	cin >> s1.gpa;
	cout << "学生s1信息:" << endl << "学号:" << s1.idNumber << "姓名:" << s1.name << "年龄:" << s1.age
		<< endl << "院系: " << s1.department << "成绩" << s1.gpa << endl;
	s2 = s1;
	cout << "学生s2信息:" << endl << "学号:" << s2.idNumber << "姓名:" << s2.name << "年龄:" << s2.age
		<< endl << "院系: " << s2.department << "成绩" << s2.gpa << endl;
	system("pause");
}

以上结果表明结构的成员数据是既可以被读出,也可以被写入。而且相同类型的结构变量还能够用赋值操作符”=“相互赋值。
值得注意的是:
1.两者类型名不同,成员的数据个数和名称不同,部分成员数据的数据类型相同,是不能通过赋值操作符来相互赋值的。
2.两者类型名不同,成员的数据个数相同,所有成员数据的数据类型相同,还是不能通过赋值操作符来相互赋值的。
3.两者类型名不同,成员数据的个数和名称都相同,所有成员数据的数据类型相同,也还是不能通过赋值操作符来相互赋值的。

当结构体作为参数时,和普通变量一样,形参的修改是不会对实参产生影响,如果希望在函数中修改实参,可以使用引用的方法,由于结构往往整合了许多成员数据,它的数据量不可小觑。使用值传递虽然能够保护实参不被修改,但是却或多或少地影响程序的执行效率。所以,一般情况选择引用的方法。

#include <iostream>
using namespace std;
struct student
{
	int idNumber;
	char name[15];
	int age;
	char department[20];
	float gpa;
};
/*void display(student arg);*///结构作为参数
void display(student arg)
{
	cout << "学号: " << arg.idNumber << "姓名:" << arg.name << "年龄:" << arg.age << "院系:" << arg.department <<
		"成绩:" << arg.gpa << endl;
	cout << "arg.name的地址" << &arg.name << endl;
	for (int i = 0; i < 6;i++)
	{
		arg.name[i] = 'A';
	}
	arg.age++;
	arg.gpa = 99.9f;
}
int main()
{
	student s1 = { 3039, "tomo", 20, "ComputerScience", 92.5 };//声明s1,并对s1初始化;
	cout << "s1.name的地址" << &s1.name << endl;
	display(s1);
	cout << "形参被修改后……" << endl;
	display(s1);
	system("pause");
}

在这里插入图片描述

还有结构体作为返回值时,可以把所有需要返回的变量整合到一个结构中来,方便,可读性强。
具体实例如下:

struct student
{
	int idNumber;
	char name[15];
	int age;
	char department[20];
	float gpa;
};
void display(student arg)
{
	cout << "学号: " << arg.idNumber << "姓名:" << arg.name << "年龄:" << arg.age << "院系:" << arg.department <<
		"成绩:" << arg.gpa << endl;
}
student initial()
{
	student s1 = { 3039, "tomo", 20, "ComputerScience", 92.5 };
	return s1;
}
int main()
{
	display(initial());
	system("pause");
}

运行结果:在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43510732/article/details/84664802