c++中的结构体

c++中的结构体,第1张

c++中的结构体 (如果使用到了string的话,需要在源文件开始引入string)

定义结构体的方法(struct  结构体的名字)

struct是一个关键字,用来定义结构体的,定义结构体的时候,struct关键字不可以省略。

使用struct关键字来定义一个学生的结构体,其中包括姓名,年龄,考试分数。

//定义一个学生的结构体,包含姓名,年龄,分数
struct student {
	string name;
	int age;
	int score;
}s3;
创建结构体的三种方式

创建结构体的时候,关键字struct可以省略不写

1.student s1;  s1.name="张三";  s1.age=18;   s1.score=100;

 2.student s2 = {"李四",17,100};

3.s3={{"王五",27,100};

    因为我们在定义结构体的时候写过了s3

 所以不写student,直接s3就可以了

 

 结构体变量是通过"."来访问结构体成员的。

结构体数组
  1. 定义结构体
  2. 创建结构体
  3. 给结构体赋值
  4. 遍历结构体 
#include 
using namespace std;
#include 

//1、定义结构体
struct student {
	string name;
	int age;
	int score;
};

int main() {
	
	//2.创建结构体
	student stuArr[3]{
		{"张三",18,98},
		{"李三",8,48},
		{"王三",18,98},
	};

	//3.修改结构体数组中的值
	stuArr[2].name = "赵六";
	stuArr[2].age = 23;
	stuArr[2].score = 12;

	//4.循环遍历结构体数组
	for (int i = 0; i < 3; i++) {
		cout << "姓名:  " << stuArr[i].name << "  年龄:" << stuArr[i].age << "   分数:" << stuArr[i].score << endl;
	};

	system("pause");

	return 0;

}
结构体指针

作用:通过指针访问结构体中的成员

注意:  指针的数据类型需要和指向对象的数据类型一样,否则

 

  所以当我们使用指针指向结构体的时候,使用的定义的结构体名而不是int。

 

 指针访问结构体的语法:指针名 -> 结构体中的属性名

运行效果: 

#include 
using namespace std;
#include 

//1、定义结构体
struct student {
	string name;
	int age;
	int score;
};

int main() {
	
	//2.创建结构体
	student s ={ "张三",18,98 };


	//3.通过指针指向结构体
	student * p = &s;

	//4.通过指针访问结构体变量中的数据(指针名  ->  属性名)
   

	cout << "  姓名:  " << p->name << endl;
	
	system("pause");

	return 0;

}

 总结:结构体指针可以通过"->"来访问结构体成员

结构体嵌套结构体

作用:结构体中的成员可以是另一个结构体

注意:结构体a中嵌套的结构体b,应在定义结构体a之前定义好结构体b,不然会

所以我们应该在定义结构体teacher之前先定义student结构体 

 创建结构体

 打印结构体

 结构体中嵌套结构体的代码

#include 
using namespace std;
#include 

//定义学生的结构体
struct student {
	string name;//学生姓名
	int age;//学生年龄
	int score;//学生成绩
};



//定义老师的结构体,包含教师id,教师姓名,教师年龄以及辅导的学生
struct teacher {
	int id;//教师id
	string name;//教师姓名
	int age;//教师年龄
	struct student s1;
};


int main() {


	//创建结构体
	teacher t;
	t.id = 0001;
	t.name = "老王";
	t.age = 35;
	t.s1.name = "小盖";
	t.s1.age = 18;
	t.s1.score = 66;

	//打印结构体
	cout << "老师编号:" << t.id << "  老师的姓名:" << t.name << "    老师的年龄: " << t.age << endl;
	cout << t.name <<"辅导的学生---"<<"学生姓名: " << t.s1.name << "  学生成绩:" << t.s1.score << "    学生的年龄: " << t.s1.age << endl;


	system("pause");

	return 0;

}
 结构体做函数参数
  1. 值传递
  2. 地址传递
值传递

值传递:只改变形参不改变实参

#include 
#include 
using namespace std;


//1.定义结构体
struct student {
	string name;//姓名
	int age;//年龄
	int score;//分数
};

//定义值传递的函数
void a(student s1) {
	s1.age = 5;
	cout<<"值传递函数中打印   " << "  姓名:  " << s1.name << "    年龄:   " << s1.age << endl;
}

int main() {

	//2.创建结构体
	student s1 = {
	"张三",18,88
	};

    a(s1);

	cout << "main函数中打印  " << "  姓名:  "< 

 

 

地址传递

地址传递:即改变形参也改变实参

#include 
#include 
using namespace std;


//1.定义结构体
struct student {
	string name;//姓名
	int age;//年龄
	int score;//分数
};

//定义地址传递的函数
void a(struct student * p) {
	p->age = 5;
	cout<<"值传递函数中打印   " << "  姓名:  " << p->name << "    年龄:   " << p->age << endl;
}

int main() {

	//2.创建结构体
	student s1 = {
	"张三",18,88
	};

	
	a(&s1);

	cout << "main函数中打印  " << "  姓名:  " << s1.name << "    年龄:   " << s1.age << endl;

	system("pause");

	return 0;

}
 ​​​​​​​

 总结:当结构体作为函数参数的时候,如果是值传递的话不改变实参,如果是地址传递的话会改变实参。

结构体中const使用场景

作用:加const防止误 *** 作

#include 
#include 
using namespace std;


//1.定义结构体
struct student {
	string name;//姓名
	int age;//年龄
	int score;//分数
};

//定义地址传递的函数----在函数的形参前加上const后
void a(const student * p) {
	p->age = 5;//就不会允许修改结构体的属性值了
	cout<<"值传递函数中打印   " << "  姓名:  " << p->name << "    年龄:   " << p->age << endl;
}

int main() {

	//2.创建结构体
	student s1 = {
	"张三",18,88
	};

	
	a(&s1);

	cout << "main函数中打印  " << "  姓名:  " << s1.name << "    年龄:   " << s1.age << endl;

	system("pause");

	return 0;

}

 总结:加上const以后,就不允许修改结构体里的属性值了。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5115397.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存