c++基础知识第十天:结构体嵌套结构体,结构体作函数参数

2023-05-16

一、结构体嵌套结构体

结构体内的成员可以是另一个结构体(访问时用.访问到不能访问为止)

1、例如:每个老师指导一个学员,一个老师的结构体中嵌套一个学生的结构体

#include<iostream>
using namespace std;
#include<string>
//结构体嵌套结构体

//1、定义结构体(先告诉系统有这样一个数据类型)
struct student
{
	string name;
	int age;
	int score;
};
struct teacher
{
	int id;
	string name;
	int age;
	struct student stu;
};

int main()
{
	//创建老师
	teacher t;
	t.id = 10000;
	t.name = "老王";
	t.age = 50;
	t.stu.name = "小汪";
	t.stu.age = 18;
	t.stu.score = 100;
	cout << "老师姓名:" << t.name << " " << "老师职工编号:" << t.id << " " << "老师的年龄:" << t.age << endl;
	cout << "老师辅导的学生姓名:" << t.stu.name << " " << "学生的年龄:" << t.stu.age << " " << "学生的分数:" << t.stu.score << endl;
}


二、结构体作为函数参数

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

2、传递方式:值传递(形参改变,实参不改变),地址传递(实参随着形参的改变而改变)

因为值传递时相当于在给形参开辟一段内存空间并将实参的复制进去,对于形参变量的操作在形参内存空间中进行。但是地址传递形参开辟的空间传入的是实参的地址,对于形参变量的操作会通过地址访问到实参的内存空间,所以实参跟着改变。

1)

#include<iostream>
using namespace std;
#include<string>
//结构体做函数的参数
//将学生传入到一个函数中,打印学生的信息

//1、定义结构体(先告诉系统有这样一个数据类型)
struct student
{
	string name;
	int age;
	int score;
};
//3、定义打印函数
void printfunction(student s)
{
	cout << s.name << " " << s.age << " " << s.score << endl;
}


int main()
{
	//2、创建结构体变量
	student s1 = { "张三",24,100 };
	printfunction(s1);//调用函数

}


2)指针用箭头访问属性

#include<iostream>
using namespace std;
#include<string>
//结构体做函数的参数
//将学生传入到一个函数中,打印学生的信息

//1、定义结构体(先告诉系统有这样一个数据类型)
struct student
{
	string name;
	int age;
	int score;
};
//3、定义打印函数
void printfunction(student *p1)
{
	cout << p1->name << " " << p1->age << " " << p1->score << endl;
}


int main()
{
	//2、创建结构体变量
	student s1 = { "张三",24,100 };
	student* p = &s1;
	printfunction(p);//调用函数

}


值传递和地址传递区别:

值传递时在,在子函数中改变属性(也就是改变了形参),不会改变主函数中的实参的输出。

#include<iostream>
using namespace std;
#include<string>
//结构体做函数的参数
//将学生传入到一个函数中,打印学生的信息

//1、定义结构体(先告诉系统有这样一个数据类型)
struct student
{
	string name;
	int age;
	int score;
};
//3、定义打印函数
void printfunction(student s)
{
	s.age = 100;
	cout <<"值传递子函数中:"<< s.name << " " << s.age << " " << s.score << endl;
	//cout << p1->name << " " << p1->age << " " << p1->score << endl;
}


int main()
{
	//2、创建结构体变量
	student s1 = { "张三",24,100 };
	//student* p = &s1;
	printfunction(s1);//调用函数
	cout<<"main函数中:"<< s1.name << " " << s1.age << " " << s1.score << endl;
}


地址传递时,实参随着形参的改变而改变

#include<iostream>
using namespace std;
#include<string>
//结构体做函数的参数
//将学生传入到一个函数中,打印学生的信息

//1、定义结构体(先告诉系统有这样一个数据类型)
struct student
{
	string name;
	int age;
	int score;
};
//3、定义打印函数
void printfunction(student *p1)
{
	p1->age = 100;
	//cout <<"值传递子函数中:"<< s.name << " " << s.age << " " << s.score << endl;
	cout <<"地址传递时:"<< p1->name << " " << p1->age << " " << p1->score << endl;
}


int main()
{
	//2、创建结构体变量
	student s1 = { "张三",24,100 };
	student* p = &s1;
	printfunction(p);//调用函数
	cout<<"main函数中:"<< s1.name << " " << s1.age << " " << s1.score << endl;
}


三、结构体中const使用场景

1、作用:用const防止误操作(当代码过大,若进行限制,就会提示你是否进行误操作)

#include<iostream>
using namespace std;
#include<string>
//结构体const使用场景


//1、定义结构体(先告诉系统有这样一个数据类型)
struct student
{
	string name;
	int age;
	int score;
};

void printsudent(const student *s)//将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来
{
	错误:s->age = 100;//如果这里将形参的属性修改,那么实参也会被修改.加入const后,一旦有修改的操作就会报错,可以防止误操作
	cout << s->name << " " << s->age << " " << s->score<<endl;
}

int main()
{//2、在main函数中创建结构体变量并初始化
	struct student s = { "张三",15,70 };
	//通过函数打印结构体变量信息
	printsudent(&s);
	cout << "张三的年龄:" << s.age << endl;
}


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++基础知识第十天:结构体嵌套结构体,结构体作函数参数 的相关文章

  • 激光雷达 LOAM 论文 解析

    注意 xff1a 本人实验室买的是Velodyne VLP 16激光雷和 LOAM 论文中作者用的不一样 xff0c 在介绍论文之前先介绍一下激光雷达的工作原路 xff0c 这样更容易理解激光雷达的工作过程 xff0c 其实物图如下图1所示
  • VINS 细节系列 - 坐标转换关系

    前言 在学习VINS Mono过程中 xff0c 对初始化代码中的坐标转换关系做出了一些推导 xff0c 特意写了博客记录一下 xff0c 主要记录大体的变量转换关系 相机和IMU的外参 若需要VINS标定旋转外参 xff0c 则进入以下代
  • VINS 细节系列 - 光束法平差法(BA)Ceres 求解

    一 理论部分 学习过VINS的小伙伴应该知道 xff0c 在SFM xff08 structure from motion xff09 的计算中 光束法平差法 BA xff08 Bundle Adjustment xff09 的重要性 xf
  • Ceres 详解(一) Problem类

    引言 Ceres 是由Google开发的开源C 43 43 通用非线性优化库 xff08 项目主页 xff09 xff0c 与g2o并列为目前视觉SLAM中应用最广泛的优化算法库 xff08 VINS Mono中的大部分优化工作均基于Cer
  • VINS - Fusion GPS/VIO 融合 一、数据读取

    目录 一 相关概念 二 程序解读 2 1 参数读取 解析 xff1a 2 2 获取图像时间信息 解析 xff1a 2 3 获取图像时间信息 解析 xff1a 2 4 定义VIO结果输出路径和读取图像信息 解析 xff1a 2 5 读取GPS
  • VINS - Fusion GPS/VIO 融合 二、数据融合

    https zhuanlan zhihu com p 75492883 一 简介 源代码 xff1a VINS Fusion 数据集 xff1a KITTI 数据 程序入口 xff1a globalOptNode cpp 二 程序解读 2
  • VINS - Fusion GPS/INS/视觉 融合 0、 Kitti数据测试

    放两张图片 至于为什么 xff1f 后面会解释 xff01 程序下载 xff1a https github com HKUST Aerial Robotics VINS Fusion 数据集制作 xff1a https zhuanlan z
  • GPS/INS/视觉 融合 、 自己采集数据测试

    cd VIO GPS MapVIG cmake build cmake make run MapVIG 别忘了更新一下 一 运行程序 打开第一个终端 roscore 打开第二个终端 进入工作区间内 xff0c 分别输入 xff1a cd G
  • 九、 惯性导航解算

    一 概述 惯性导航解算就是从上一时刻的导航信息推导本时刻的导航信息 xff0c 包括姿态 速度 位置 具体来讲 xff0c 就是构建当前时刻导航信息与上一时刻导航信息 运动输入 角速度 加速度 之间的关系 xff0c 确切地说 xff0c
  • 十二、构建一个基本的组合导航系统

    一 概述 在之前的文章里 xff0c 我们从一个基本的IMU模块开始讲起 xff08 二 xff09 xff0c 利用Allan方差分析方法 xff08 三 四 xff09 xff0c 得出了其误差参数 xff0c 又通过标定 xff08
  • 电脑键盘工作原理

    xfeff xfeff 随着IBM PC机的发展 xff0c 键盘也分为XT AT PS 2键盘以至于后来的USB键盘 PC系列机使用的键盘有83键 84键 101键 102键和104键等多种 XT和AT机的标准键盘分别为83键和84键 x
  • 十三、扩展一个组合导航系统

    感谢大神分享 xff1a https zhuanlan zhihu com p 156958777 一 概述 上一篇文章我们讲述了怎样搭建一个基本的组合导航系统 xff0c 它仅仅包括IMU做预测 GPS做观测 xff0c 而实际中 xff
  • 三、FSAS + Novatel接收机和相机时间同步、数据保存、解码等 细节说明

    一 器件说明 1 GNSS 接收机是 P ropak6 如下图所示 xff1a 具体得介绍 xff1a 1 https blog csdn net hltt3838 article details 110622732 2 二 NovAtel
  • Word 中出现公式不能编辑问题(兼容模式)

    当word中的公式不能编辑 xff0c 多数原因是由于word是处于兼容模式下 xff0c 这个时候就需要取消world的兼容模式 xff0c 具体步骤如下 xff1a 一 打开word文档 二 点击 word中的文件 出现如下结果 xff
  • 理论三、 MSCKF 数学基础

    感谢 xff1a 紫薯萝卜 https zhuanlan zhihu com p 76793847 1 数学定义 后续将进行MSCKF数学基础介绍 xff0c 先总结一下数据符号定义 坐标系定义 物理量定义 估计量定义 四元数定义 xff1
  • 算法改进5:开源算法Open VINS试用

    1 Open VINS简介 Open VINS是Huang Guoquan老师团队在2019年8月份开源的一套基于MSCKF的VINS算法 xff0c 黄老师曾是Tango项目的核心成员 xff0c 在MSCKF这块非常的权威 Github
  • MSCKF 公式推导

    看完这篇博客建议再看 xff1a http www xinliang zhong vip msckf notes 目录 一 简介 二 符号说明 三 状态向量 3 1 真实状态向量 true state 3 2 误差状态向量 error st
  • MSCKF 源码解析 一

    论文 xff1a https arxiv org abs 1712 00036 源码路径 https github com daniilidis group msckf mono 源码框架 上图展示了整个msckf源码框架 xff0c 每当
  • C++中 仿函数简单介绍

    仿函数 xff0c 顾名思义 xff0c 就是 仿造函数 的意思 xff0c 它并不是函数 xff0c 但是却有着类似于函数的行为 那么 xff0c 它到底是什么 xff1f 首先要说的是 xff1a 仿函数是泛型编程强大威力和纯粹抽象概念
  • GNSS/INS组合导航(八):INS/GPS组合导航

    INS GPS组合导航 对比INS与GPS导航方法 xff0c 二者都有其各自的优缺点 惯性导航系统INS是一种全自主的导航系统 xff0c 可以输出超过200Hz的高频信号 xff0c 并且具有较高的短期测量精度 除了提供位置与速度之外还

随机推荐