首页 > 编程语言 >C++结构体使用

C++结构体使用

时间:2024-05-30 18:03:39浏览次数:29  
标签:struct int age C++ QString 使用 include 结构

文章目录

原文链接

c++中的结构体

一、结构体基本概念

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型

二、使用及定义

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

//struct 结构体名 {结构体成员列表};
struct animals
{
	//成员列表
	QString name;
	int age;
	QString color;
}cat;//在定义结构体时顺便创建结构体变量

通过结构体创建变量的方式有三种:

  • struct 结构体名 变量名
	//通过结构体创建变量——struct 结构体名 变量名
	animals cat1;
	cat1.name = "小花";
	cat1.age = 2;
	cat1.color = "花";
	qDebug() << "第一只小猫的名字是" << cat1.name << ",年龄是" << cat1.age << "岁,颜色是" << cat1.color;

也可以写成
typedef struct 在 C++ 中通常用于为结构体(struct)定义一个别名,这样可以使用一个简单的名字来代替完整的 struct 名字

typedef struct animals
{
	//成员列表
	QString name;
	int age;
	QString color;
}cat;//在定义结构体时顺便创建结构体变量

	//如果使用typedef struct ,这边需要声明,和通过结构体创建变量——struct 结构体名 变量名一样
	animals cat;
	//通过结构体创建变量——结构体变量利用操作符“.”访问成员
	cat.name = "小白";
	cat.age = 1;
	cat.color = "白色";
	qDebug() << "第三只小猫的名字是" << cat.name << ",年龄是" << cat.age << "岁,颜色是" << cat.color;

  • struct 结构体名 变量名={成员1值,成员2值…}
//通过结构体创建变量——struct 结构体名 变量名={成员1值,成员2值...}
	animals cat2 = { "牛奶",1.5,"黑白色" };
	qDebug() << "第二只小猫的名字是" << cat2.name << ",年龄是" << cat2.age << "岁,颜色是" << cat2.color;
  • 定义结构体时顺便创建变量
//通过结构体创建变量——结构体变量利用操作符“.”访问成员
	cat.name = "小白";
	cat.age = 1;
	cat.color = "白色";
	qDebug() << "第三只小猫的名字是" << cat.name << ",年龄是" << cat.age << "岁,颜色是" << cat.color;

全部代码

//防止中文乱码
#pragma execution_character_set("utf-8") 

#include <QtCore/QCoreApplication>
#include "QString"
#include "iostream"
#include "string"
#include "QDebug"
using namespace std;

//struct 结构体名 {结构体成员列表};
struct animals
{
	//成员列表
	QString name;
	int age;
	QString color;
}cat;//在定义结构体时顺便创建结构体变量


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

	//通过结构体创建变量——struct 结构体名 变量名
	animals cat1;
	cat1.name = "小花";
	cat1.age = 2;
	cat1.color = "花";
	qDebug() << "第一只小猫的名字是" << cat1.name << ",年龄是" << cat1.age << "岁,颜色是" << cat1.color;


	//通过结构体创建变量——struct 结构体名 变量名={成员1值,成员2值...}
	animals cat2 = { "牛奶",1.5,"黑白色" };
	qDebug() << "第二只小猫的名字是" << cat2.name << ",年龄是" << cat2.age << "岁,颜色是" << cat2.color;

	//通过结构体创建变量——结构体变量利用操作符“.”访问成员
	cat.name = "小白";
	cat.age = 1;
	cat.color = "白色";
	qDebug() << "第三只小猫的名字是" << cat.name << ",年龄是" << cat.age << "岁,颜色是" << cat.color;

    return a.exec();
}

输出结果
在这里插入图片描述

三、结构体数组

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

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

//防止中文乱码
#pragma execution_character_set("utf-8") 

#include <QtCore/QCoreApplication>
#include "QString"
#include "iostream"
#include "string"
#include "QDebug"
using namespace std;

//1、定义结构体
//struct 结构体名 {结构体成员列表};
struct animals
{
	//成员列表
	QString name;
	int age;
	QString color;
}cat;//在定义结构体时顺便创建结构体变量


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

	//2、创建结构体数组
	struct animals cat[5]{
		{"小花",2,"花色"},
		{"小白",5,"白色"},
		{"牛奶",4,"黑白相间"},
		{"饺子",3,"棕色"},
		{"喵喵",1,"橘色"},
	};

	//3.给结构体数组中的元素赋值
	cat[3].name = "大佬";
	cat[3].age = 2;
	cat[3].color = "豹纹";
	for (animals it :cat)
	{
		qDebug() << "小猫的名字是" << it.name << ",年龄是" << it.age << "岁,颜色是" << it.color;
	}
    return 0;
}

输出
在这里插入图片描述

四、结构体指针

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

利用操作符->可以通过结构体指针访问结构体属性

//防止中文乱码
#pragma execution_character_set("utf-8") 

#include <QtCore/QCoreApplication>
#include "QString"
#include "iostream"
#include "string"
#include "QDebug"
using namespace std;

//struct 结构体名 {结构体成员列表};
struct animals
{
	//成员列表
	QString name;
	int age;
	QString color;
}cat;//在定义结构体时顺便创建结构体变量


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

	//创建结构体变量
	struct animals cat = { "小花",2,"花色" };
	struct animals *c = &cat;

	//通过指针指向结构体变量
	qDebug() << "小猫的名字是" << c->name << ",年龄是" << c->age << "岁,颜色是" << c->color;

    return 0;
}

输出
在这里插入图片描述
五、结构体嵌套结构体
作用:结构体中的成员可以是另一个结构体

例如:每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体

//防止中文乱码
#pragma execution_character_set("utf-8") 

#include <QtCore/QCoreApplication>
#include "QString"
#include "iostream"
#include "string"
#include "QDebug"
using namespace std;

//定义学生结构体
struct Student {
	QString name;//学生姓名
	int age;//学生年龄
	int score;//学生编号
};

//定义教师结构体
struct Teacher {
	int id;//教师编号
	QString name;//教师姓名
	int age;//教师年龄
	struct Student stu;//辅导的学生
};
int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	//结构体嵌套结构体
	//创建老师
	Teacher  t;
	t.id = 12023;
	t.name = "李文静老师";
	t.age = 25;
	t.stu.name = "韩梅梅";
	t.stu.age = 16;
	t.stu.score = 100;

	qDebug() << "教师编号:" << t.id << endl;
	qDebug() << "教师姓名:" << t.name << endl;
	qDebug() << "教师年龄:" << t.age << endl;
	qDebug() << "辅导的学生姓名:" << t.stu.name << endl;
	qDebug() << "辅导的学生年龄:" << t.stu.age << endl;
	qDebug() << "辅导的学生成绩:" << t.stu.score << endl;
	return 0;
}

输出
在这里插入图片描述

六、结构体做函数参数

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

传递方式有两种

  1. 值传递
//防止中文乱码
#pragma execution_character_set("utf-8") 

#include <QtCore/QCoreApplication>
#include "QString"
#include "iostream"
#include "string"
#include "QDebug"
using namespace std;

//定义学生结构体
struct Student {
	int age;//学生年龄
	int number;//学生编号
};

// 函数接收结构体作为值传递
void printStudentByValue(Student s) {
	qDebug() << "年龄是: " << s.age << ", 编号是: " << s.number << endl;
}

int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	// 创建一个结构体实例
	Student student = { 14, 2067 };

	// 调用函数,使用值传递
	printStudentByValue(student);
	return 0;
}

输出
在这里插入图片描述

  1. 地址传递
//防止中文乱码
#pragma execution_character_set("utf-8") 

#include <QtCore/QCoreApplication>
#include "QString"
#include "iostream"
#include "string"
#include "QDebug"
using namespace std;

//定义学生结构体
struct Student {
	int age;//学生年龄
	int number;//学生编号
};

// 函数接收结构体的指针(地址传递)
void printStudentByPointer(Student* s) { qDebug() << "地址传递 年龄是: " << s->age << ", 编号是: " << s->number << endl; };


// 函数接收结构体的引用(引用传递)
void printStudentByReference(const Student& s) { qDebug() << "引用传递 年龄是: " << s.age << ", 编号是: " << s.number << endl; }

int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	// 创建一个结构体实例
	Student student = { 14, 2067 };

	// 调用函数,使用地址传递
	printStudentByPointer(&student);
	
	// 调用函数,使用引用传递
	printStudentByReference(student);

	return 0;
}

在这里插入图片描述

值传递 和地址传递的区别

值传递代码:(值传递,形参的改变不会修改实参的值)

//防止中文乱码
#pragma execution_character_set("utf-8") 

#include <QtCore/QCoreApplication>
#include "QString"
#include "iostream"
#include "string"
#include "QDebug"
using namespace std;

//定义学生结构体
struct Student {
	int age;//学生年龄
	int number;//学生编号
};

// 函数接收结构体作为值传递
void printStudentByValue(Student s) {
	s.number = 1090; //修改传入的结构体的编号
	qDebug() << "值传递  年龄是: " << s.age << ", 编号是: " << s.number << endl;
}

int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	// 创建一个结构体实例
	Student s = { 14, 2067 };

	// 调用函数,使用值传递
	printStudentByValue(s);

	qDebug() << "main 函数 值传递  年龄是: " << s.age << ", 编号是: " << s.number << endl;
	return 0;
}

输出 形参的改变不会修改实参的值在这里插入图片描述

地址传递代码(地址传递,形参的改变改变实参的值)

//防止中文乱码
#pragma execution_character_set("utf-8") 

#include <QtCore/QCoreApplication>
#include "QString"
#include "iostream"
#include "string"
#include "QDebug"
using namespace std;

//定义学生结构体
struct Student {
	int age;//学生年龄
	int number;//学生编号
};

// 函数接收结构体的指针(地址传递)
void printStudentByPointer(Student* s) {
	s->score = 1090;
	qDebug() << "地址传递 年龄是: " << s->age << ", 编号是: " << s->number << endl;
};

int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	// 创建一个结构体实例
	Student s = { 14, 2067 };

	// 调用函数,使用地址传递
	printStudentByPointer(&s);

	qDebug() << "main 函数 值传递  年龄是: " << s.age << ", 编号是: " << s.number << endl;
	return 0;
}

在这里插入图片描述

七、结构体中 const的使用场景

作用:用const来防止误操作

//防止中文乱码
#pragma execution_character_set("utf-8") 

#include <QtCore/QCoreApplication>
#include "QString"
#include "iostream"
#include "string"
#include "QDebug"
using namespace std;

//定义学生结构体
struct Student {
	int age;//学生年龄
	int number;//学生编号
};

// 函数接收结构体的引用(引用传递)
void printStudentByReference(const Student *s) {
	//加入const 一旦有修改的操作就会报错,可以防止的误操作(只能读不能修改)
	//s.age = 21;//修改结构体变量的age属性 错误
	qDebug() << "引用传递 年龄是: " << s->age << ", 编号是: " << s->number << endl;
}

int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	// 创建一个结构体实例
	Student s = { 14, 2067 };

	// 调用函数,使用地址传递
	printStudentByPointer(&s);

	qDebug() << "main 函数 值传递  年龄是: " << s.age << ", 编号是: " << s.number<< endl;
	return 0;
}

报错
在这里插入图片描述

输出
在这里插入图片描述

标签:struct,int,age,C++,QString,使用,include,结构
From: https://blog.csdn.net/weixin_74239923/article/details/139317563

相关文章

  • 工具类 java List集合转树形结构TerrList 构建List集合为树形结构
    点下面↓工具类javaList集合转树形结构TerrList构建List集合为树形结构工具类javaList集合转树形结构TerrList构建List集合为树形结构-CSDN博客......
  • 使用perf工具生成火焰图
    1.安装FlameGraph工具集FlameGraph工具集是由BrendanGregg开发的,用于将perf等工具的输出转换为SVG格式的火焰图。你可以通过克隆GitHub上的FlameGraph仓库来获取这些工具:gitclonehttps://github.com/brendangregg/FlameGraph.git   要得到CPU火焰图,特别是在CentOS......
  • 视频汇聚EasyCVR平台对接GA/T 1400视图库:结构化数据(人员/人脸、车辆、物品)对象XMLSche
    在信息化浪潮席卷全球的背景下,公安信息化建设日益成为提升社会治理能力和维护社会稳定的关键手段。其中,GA/T1400标准作为公安视频图像信息应用系统的核心规范,以其结构化数据处理与应用能力,为公安信息化建设注入了强大的动力。GA/T1400标准全称为《公安视频图像信息应用系统》......
  • c++ 模板 元编程
    模板是门新语言C++元编程是一种使用模板元编程技术实现的编程方式,它允许程序员在编译期进行计算和代码生成。相比于传统的运行时编程,C++元编程可以提高程序的执行效率,减少资源开销,使得编译器能够优化代码,从而在一些对性能要求较高的场景中有着广泛的应用。   来自:https:/......
  • C++ Primer Plus(第6版):程序的创建过程
    一个C++程序是如何一步步创建的呢?一般来说主要分为三个过程:使用文本编辑器编写程序,并将其保存至文件中,这个文件就是程序的源代码。编译源代码。这是指将源代码翻译为主机使用的内部语言--机器语言,将翻译后的代码称之为目标代码(objectcode)。将目标代码与其它代码链接起来。链......
  • golang context.Context 使用示例
    context在golang程序中经常被用到,它可以被用来携带一些变量,例如requestID,也可以用来做运行控制,比如TimeoutDeadline,或者人为逻辑控制Cancel。本实例程序用来简单展示各个context的使用方法。packagemainimport( "context" "fmt" "log" "time")typeCtxKeystring......
  • 三十二、openlayers官网示例解析Draw lines rendered with WebGL——使用WebGL动态修
     官网demo地址:DrawlinesrenderedwithWebGL这个示例展示了如何用webgl渲染矢量图形并动态修改点、线属性。首先先把基本的地图加载上去initMap(){this.map=newMap({layers:[newTileLayer({source:newXYZ({......
  • JavaDS-学习数据结构之如果从零开始手搓顺序表,顺带学习自定义异常怎么用!
    前言笔者开始学习数据结构了,虽然笔者已经会用了,不管是C++中的stl亦或是Java中的集合,为了算法比赛多少都突击过,但只知其然而不知其所以然,还是会限制发展的,因此,笔者写下这篇博客.内容是手搓一个顺序表.顺带加一点异常的使用,大伙看个乐子就好了.有错误直接私信喷我就......
  • 视频汇聚平台EasyCVR对接GA/T 1400视图库结构化数据:人员/人脸、非/机动车、物品
    在信息化浪潮席卷全球的背景下,公安信息化建设日益成为提升社会治理能力和维护社会稳定的关键手段。其中,GA/T1400标准作为公安视频图像信息应用系统的核心规范,以其结构化数据处理与应用能力,为公安信息化建设注入了强大的动力。GA/T1400标准全称为《公安视频图像信息应用系......
  • uniapp微信小程序使用瀑布流结合z-panging组件显示pexels的图片
    最终效果如下:  瀑布流组件用的:https://ext.dcloud.net.cn/plugin?id=7594下拉刷新组件用的:https://z-paging.zxlee.cn这两个搭配起来省了很多事z-paging中组合custom-waterfalls-flow,可下拉刷新、到底自动加载下一页。下拉刷新效果: 到底自动加载下一页效果: ......