内置类型和结构体类型作为函数参数传递时的共同点

2024-01-23 08:38

本文主要是介绍内置类型和结构体类型作为函数参数传递时的共同点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

结构体类型不同于数组,而结构体类型与内置类型有很多相同之处。数组名代表数组的第一个元素的地址,而结构体名代表的却不是地址而是第一个元素的值。在作为函数参数时,和内置类型一样,可以通过值(结构体名)、引用、指针几种方式传递。而且其传递特点与内置类型一致,例子:

#include <iostream>
using namespace std;
typedef struct Change
{
int m;
int n;
}StrChange;
void Change(int a1);
void YChange(int &b1);
void PChange(int *c1);
void Change1(StrChange ChangeL1 );
void YChange1(StrChange &ChangeM1);
void PChange1(StrChange *ChangeN1);
void main()
{
int a = 1;
int b = 2;
int c = 3;
StrChange ChangeL;
StrChange ChangeM;
StrChange ChangeN;
ChangeL.m = 4;
ChangeL.n = 5;
ChangeM.m =6;
ChangeM.n = 7;
ChangeN.m = 8;
ChangeN.n = 9;
Change(a);     //传值,无法改变
YChange(b);     //引用,可以改变
PChange(&c);    //指针(地址),可以改变
Change1(ChangeL);	//值,无法改变。和基本类型一样,不能通过传值改变,这里不同于数组!
YChange1(ChangeM);	//引用,可以改变
PChange1(&ChangeN);	//指针(地址),可以改变
cout<<"The a is :  "<<a<<endl;
cout<<"The b is :  "<<b<<endl;
cout<<"The c is :  "<<c<<endl;
cout<<"The m in struct L is :  "<<ChangeL.m<<endl;
cout<<"The n in struct L is :  "<<ChangeL.n<<endl;
cout<<"The m in struct M is :  "<<ChangeM.m<<endl;
cout<<"The n in struct M is :  "<<ChangeM.n<<endl;
cout<<"The m in struct N is :  "<<ChangeN.m<<endl;
cout<<"The n in struct N is :  "<<ChangeN.n<<endl;
}
void Change(int a1)
{
a1 = 11;
}
void YChange(int &b1)
{
b1 = 22;
}
void PChange(int *c1)
{
*c1 = 33;
}
void Change1(StrChange ChangeL1 )
{
ChangeL1.m = 44;
ChangeL1.n = 55;
}
void YChange1(StrChange &ChangeM1)
{
ChangeM1.m = 66;
ChangeM1.n =77;
}
void PChange1(StrChange *ChangeN1)
{
ChangeN1->m = 88;
(*ChangeN1).n = 99;
}
 

注意:以结构体名作为参数传递时,同内置类型一样不能对实参做修改。而通过引用和指针则可以修改实参。一定要注意实参与形参的对应关系:

结构体类型与内置类型的比较
 实参形参
内置类型(传值)ab
内置类型(引用)a&b
内置类型(指针)&a*b
结构体类型(传值)

a(数组名)

a(数组名)
结构体类型(引用)a&b
结构体类型(指针)&a*b

另外,C++不支持直接输出结构体名,而用C可以直接输出结构体名,得到的是第一个元素的地址。

这篇关于内置类型和结构体类型作为函数参数传递时的共同点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635839

相关文章

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

kotlin的函数forEach示例详解

《kotlin的函数forEach示例详解》在Kotlin中,forEach是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作,它的核心特点是简洁、函数式,适用于需要遍历集合且无需返回值的场... 目录一、基本用法1️⃣ 遍历集合2️⃣ 遍历数组3️⃣ 遍历 Map二、与 for 循环的区别三、高

Python如何查看数据的类型

《Python如何查看数据的类型》:本文主要介绍Python如何查看数据的类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python查看数据的类型1. 使用 type()2. 使用 isinstance()3. 检查对象的 __class__ 属性4.

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D