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");
}
运行结果: