Bootstrap

结构体struct的定义和用法

结构体(struct)

通俗来讲,就是打包封装一些有共同特征的不同数据的变量封装在内部,通过一定方法访问修改内部变量。可以说,结构体是让一些很散的数据变得很整(即井然有序)。

结构体的定义和使用

语法:struct 结构体名 { 结构体成员列表 }; 

  • struct 结构体名 变量名
  • struct 结构体名 变量名 = { 成员1值 , 成员2值…}
  • 定义结构体时创建变量
#include "iostream"
using namespace std;

//结构体变量创建方式3:定义结构体时顺便创建变量
struct student
{
     //成员列表
     char name[10];
     int age;
     int score;   
}stu3


int main(){
   
    //结构体变量创建方式1: struct 结构体名 变量名
    struct student stu1;

    stu1.name = "七喜";
    stu1.age = 20;
    stu1。score = 95;
    cout<<"姓名:"<<stu1.name <<" 年龄:"<<stu1.age <<" 分数:"<<stu1.score <<endl;


    //创建结构体变量方式2:
    struct student sut2 = {"可乐",19,100};
    cout<< "姓名:"<<stu2.name<<" 年龄:"<<stu2.age<<" 分数:"<<stu2.score<< endl;


    //方式3
    stu3.name = "雪碧";
    stu3.age  = 20;
    stu3.score = 90;
    cout<<"姓名:"<<stu3.name <<" 年龄:"<<stu3.age<<" 分数:"<<stu3.score<< endl;


    system('pause');

    return 0;
}

其中,system('pause')在C中就是从程序里调用“pause”命令,类似:“Press any key to exit”等待用户按下任意键继续的意思;在C++中,作用于防止窗口消失,即暂停黑窗口,注意不要在return语句之后加system(“pause”),那样执行不了!

结构体数组

作用:将自定义的结构体放入到数组中方便维护

 语法: struct  结构体名  数组名[元素个数] = {  { } ,  { } ,...., { }  }

结构体指针

. 和->d 区别:

.  来访问结构体成员/属性

-> 来访问其指向的结构体成员/属性

结构体嵌套

#include "iostream"
using namespace std;

//学生结构体定义
struct student
{
	//成员列表
	string name;  //姓名
	int age;      //年龄
	int score;    //分数
};

//教师结构体定义
struct teacher
{
    //成员列表
	int id; //职工编号
	string name;  //教师姓名
	int age;   //教师年龄
	struct student stu; //子结构体 学生
};


int main() {

	struct teacher t1;
	t1.id = 10000;
	t1.name = "老王";
	t1.age = 40;

	t1.stu.name = "张三";
	t1.stu.age = 18;
	t1.stu.score = 100;

	cout << " 教师 职工编号: " << t1.id << 
			" 姓名: " << t1.name << 
			" 年龄: " << t1.age << endl;
	
	cout << " 辅导学员 姓名: " << t1.stu.name << 
			" 年龄:" << t1.stu.age << 
			" 考试分数: " << t1.stu.score << endl;

	system("pause");

	return 0;
}

结构体做函数参数

传递方式包括:值传递、地址传递

#include "iostream"
using namespace std;

//学生结构体定义
struct student
{
	//成员列表
	string name;  //姓名
	int age;      //年龄
	int score;    //分数
};

//值传递
void printStudent(student stu )
{
	stu.age = 28;
	cout << "子函数中 姓名:" << stu.name << 
	" 年龄: " << stu.age  << 
	" 分数:" << stu.score << endl;
}

//地址传递
void printStudent2(student *stu)
{
	stu->age = 28;
	cout << "子函数中 姓名:" << stu->name << 
			" 年龄: " << stu->age  << 
			" 分数:" << stu->score << endl;
}

int main() {

	student stu = { "张三",18,100};
	//值传递
	printStudent(stu);
	cout << "主函数中 姓名:" << stu.name << 
			" 年龄: " << stu.age << 
			" 分数:" << stu.score << endl;

	cout << endl;

	//地址传递
	printStudent2(&stu);
	cout << "主函数中 姓名:" << stu.name << 
			" 年龄: " << stu.age  << 
			" 分数:" << stu.score << endl;

	system("pause");

	return 0;
}

注:如果不想修改主函数中的数据,用值传递,反之用地址传递。

可以用关键字const定义指针stu,修饰列表成员属性,保证修饰的属性的值(左定值,右定向)不被改变,防止函数体中的误操作。

;