当前位置 博文首页 > Rich_bin的博客:自定义数据类型——结构类型

    Rich_bin的博客:自定义数据类型——结构类型

    作者:[db:作者] 时间:2021-08-07 13:03

    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");
    }
    

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

    cs