C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用)

C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用)

目录

C++结构体(结构体创建,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,const变量使用)

1、结构体创建

2、结构体创建代码演示

3、结构体数组

4、结构体数组代码演示

5、结构体指针

6、结构体指针代码

7、结构体嵌套结构体

8、结构体嵌套结构体代码

9、结构体做函数参数

10、结构体做函数参数代码演示

11、结构体const变量使用场景


1、结构体创建

  • struct结构体名 变量名
  • struct 结构体名 变量名={成员值1,成员值2,...}
  • 定义结构体时顺便定义变量

2、结构体创建代码演示

#include<iostream>
#include<string>
using namespace std;
//通过结构体创建变量的方式有三种
//1、struct结构体名 变量名
//2、struct 结构体名 变量名={成员值1,成员值2,...}
//3、定义结构体时顺便定义变量
struct Student
{
	string name;
	int age;
	int score;
};
struct Student2
{
	string name;
	int age;
	int score;
}s3;
int main() {
	//第一种
	Student s1;
	s1.name = "张三";
	s1.age = 18;
	s1.score = 99;
	cout << "name=" << s1.name << "  age=" << s1.age << "  score=" << s1.score << endl;
	//第二种
	Student s2 = {"王二",18,97};
	cout << "name=" << s2.name << "  age=" << s2.age << "  score=" << s2.score << endl;
	//第三种
	s3.name = "王二";
	s3.age = 17;
	s3.score = 78;
	cout << "name=" << s3.name << "  age=" << s3.age << "  score=" << s3.score << endl;
	system("pause");
	return 0;
}

name=张三  age=18  score=99
name=王二  age=18  score=97
name=王二  age=17  score=78
请按任意键继续. . .

3、结构体数组

  • 定义结构体
//1、定义结构体 
struct  student
{
	string name;
	int age;
	int score;
};
  • 创建结构体数组
	//2、创建结构体数组
	struct student stuarr[3] = {
		{"张三",18,100},
		{"李四",17,90},
		{"王二",16,80}
	};
  • 给结构体数组中的元素赋值
	//3、给结构体数组中的元素赋值
	stuarr[2].name = "李三";
	stuarr[2].age = 17;
	stuarr[2].score = 10;
  • 遍历结构体数组
	for (int i = 0; i < 3; i++)
	{
		cout << "姓名:" << stuarr[i].name << "\t年龄:" << stuarr[i].age << "\t分数:" << stuarr[i].score << endl;

	}

4、结构体数组代码演示

#include<iostream>
#include<string>
using namespace std;
//结构体数组
//1、定义结构体 
struct  student
{
	string name;
	int age;
	int score;
};

int main() {
	//2、创建结构体数组
	struct student stuarr[3] = {
		{"张三",18,100},
		{"李四",17,90},
		{"王二",16,80}
	};
	//3、给结构体数组中的元素赋值
	stuarr[2].name = "李三";
	stuarr[2].age = 17;
	stuarr[2].score = 10;
	//4、遍历结构体数组
	for (int i = 0; i < 3; i++)
	{
		cout << "姓名:" << stuarr[i].name << "\t年龄:" << stuarr[i].age << "\t分数:" << stuarr[i].score << endl;

	}
	system("pause");
	return 0;
}

姓名:张三       年龄:18        分数:100
姓名:李四       年龄:17        分数:90
姓名:李三       年龄:17        分数:10
请按任意键继续. . .

5、结构体指针

  • 创建学生结构体变量
  • 通过指针指向结构体变量
  • 通过指针访问结构体变量中的数据,过结构体指针访问结构体中的属性,需要利用“->”

6、结构体指针代码

#include<iostream>
#include<string>
using namespace std;
//结构体数组
struct  student
{
	string name;
	int age;
	int score;
};

int main() {
	//1、创建学生结构体变量
	student s1 = { "李四",19,90 };
	//2、通过指针指向结构体变量
	student *p = &s1;
	//3、通过指针访问结构体变量中的数据
	cout << "姓名:" << p->name << "\t年龄:" << p->age << "\t分数:" << p->score<<endl;
	//通过结构体指针 访问结构体中的属性,需要利用“->”
	system("pause");
	return 0;
}

姓名:李四      年龄:19        分数:90
请按任意键继续. . .

7、结构体嵌套结构体

在一个结构体中包含另一个结构体变量,需要事先定义好该结构体。

struct student
{
	string name;
	int age;
	int score;
};
struct teacher
{
	string name;
	int age;
	string id;
	struct student stu;
};

8、结构体嵌套结构体代码

#include<iostream>
#include<string>
using namespace  std;
//结构体嵌套结构体
struct student
{
	string name;
	int age;
	int score;
};
struct teacher
{
	string name;
	int age;
	string id;
	struct student stu;
};
int main() {
	teacher t1;
	t1.id = "001";
	t1.name = "大王";
	t1.age = 50;
	t1.stu.name = "小王";
	t1.stu.age = 15;
	t1.stu.score = 90;
	cout << t1.id << endl << t1.name << endl << t1.age << endl
		<< t1.stu.name << endl << t1.stu.age << endl << t1.stu.score << endl;
	system("pause");
	return 0;
}

001
大王
50
小王
15
90
请按任意键继续. . .

9、结构体做函数参数

作用:将结构体作为参数向函数传递

方式:值传递、地址传递

10、结构体做函数参数代码演示

#include<iostream>
#include<string>
using namespace  std;
//结构体做函数参数
//作用:将结构体作为参数向函数传递
//传递的方式有两种:值传递、地址传递
struct student
{
	string name;
	int age;
	int score;
};
//值传递
void print(student s1) {
	cout << "值传递" << endl;
	s1.age = 100;
	cout << "子函数姓名:" << s1.name << "\t年龄:" << s1.age << "\t分数:" << s1.score << endl;
}
//地址传递
void print2(student *s) {
	cout <<"地址传递" << endl;
	s->age = 90;
	cout << "子函数姓名:" <<s->name<< "\t年龄:" << s->age << "\t分数:" << s->score << endl;
}
int main() {
	student s1;
	s1.name = "Lijian";
	s1.age = 25;
	s1.score = 100;
	print(s1);
	cout << "主函数姓名:" << s1.name << "\t年龄:" << s1.age << "\t分数:" << s1.score << endl;
	print2(&s1);
	cout << "主函数姓名:" << s1.name << "\t年龄:" << s1.age << "\t分数:" << s1.score << endl;
	system("pause");
	return 0;
}

值传递
子函数姓名:Lijian      年龄:100       分数:100
主函数姓名:Lijian      年龄:25        分数:100
地址传递
子函数姓名:Lijian      年龄:90        分数:100
主函数姓名:Lijian      年龄:90        分数:100
请按任意键继续. . .

11、结构体const变量使用场景

加入const之后,一旦有修改操作就会报错,可以防止我们的误操作对外面数据进行修改。

void print3(const student *s) {//加入const之后,一旦有修改操作就会报错,可以防止我们的误操作对外面数据进行修改
	cout << "const变量使用场景" << endl;
	//s->age = 90;错误
	cout << "子函数姓名:" << s->name << "\t年龄:" << s->age << "\t分数:" << s->score << endl;
}

 

  • 21
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1)JSON字符串还原为结构体; 2)访问结构体的字段值; uses SynCommons; const // JSON字符串 JSON1 = '{' + #13#10 + '"glossary": {' + #13#10 + '"title": "中国",' + #13#10 + ' "GlossDiv": {' + #13#10 + '"title": "湖南省",' + #13#10 + ' "GlossList": {' + #13#10 + '"GlossEntry": {' + #13#10 + '"ID": "湘乡市",' + #13#10 + ' "SortAs": "SGML",' + #13#10 + ' "GlossTerm": "Standard Generalized Markup Language",' + #13#10 + ' "Acronym": "SGML",' + #13#10 + ' "Abbrev": "ISO 8879:1986",' + #13#10 + ' "GlossDef": {' + #13#10 + '"para": "A meta-markup language, used to create markup languages such as DocBook.",' + #13#10 + ' "GlossSeeAlso": ["咏南中间件", "XML"]' + #13#10 + '},' + #13#10 + ' "GlossSee": "markup"' + #13#10 + '}' + #13#10 + '}' + #13#10 + '}' + #13#10 + '}' + #13#10 + '}'; type // 记录 TGlossary = record glossary: record title: string; GlossDiv: record title: string; GlossList: record GlossEntry: record ID, SortAs, GlossTerm, Acronym, Abbrev: string; GlossDef: record para: string; GlossSeeAlso: array of string; end; GlossSee: string; end; end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); var gloss: TGlossary; json: RawUTF8; begin json := JSON1; RecordLoadJSON(gloss, @json[1], TypeInfo(TGlossary)); Memo1.Clear; Memo1.Lines.Add(gloss.glossary.title); // 中国 Memo1.Lines.Add(gloss.glossary.GlossDiv.title); // 湖南省 Memo1.Lines.Add(gloss.glossary.GlossDiv.GlossList.GlossEntry.ID); // 湘乡市 Memo1.Lines.Add(gloss.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso[0]); // 咏南中间件 end;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月蹉跎的一杯酒

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值