第七章、函数形参(指针与引用以及传递给函数的数组、vector的操作)

C++中vector的嵌套使用方法以及作为形参的三种方式 项目场景: 题目: LeetCode 841.钥匙和房间 在做这一题时,遇到了vector的使用问题以及vector作为函数形参时涉及&与*的问题,故做整理。 问题描述: 例如:函数的形参使用了vector嵌套的同时使用了&引用,那么主函数中如何传入实参? bool canVisitAllRooms(vector<vector<int> >& rooms) 经过查询后解决方法如下: vector<vector<int> > t; v 阅读详情

1、函数形参分为非引用形参和引用形参。

非引用形参:将实参的值复制,用复制的值代入函数,进行计算,而不改变实参的值

引用形参:形参名即形参的另一个名,可以对实参直接进行改变和操作。

2、何时用引用形参,何时用非引用形参:

引用形参功能:1、对实参值进行改变。2、可以利用第一个功能实现一个函数返回多个值

非引用形参功能:1、对实参不进行改变,但可以用其值进行运算。2、不能对实参改变,对参数起保护作用。

3、非引用形参与引用形参各自的局限性:

非引用形参:1、不能改变实参的值。2、在较大的程序中,经常大量的复制操作会导致程序过慢。

引用形参:局限于实参的性质,不灵活。

4非引用形参示例:

a、指针形参:作为非引用形参,不能对实参指针的值进行改变,但可以对指针所指的值进行改变

b、const形参:在复制过程中,const性质没有了,即形参不再是const变量,而可以改变其值。

5、对函数中数组的三种操作(对数组的操作绝对不能超过数组长度):

a、向函数传入数组,定义计数器,使计数器小于数组终止符,如"string\0",其中\0为终止符。

b、向函数传入头元素及尾元素地址,在函数中用指针操作。

c、向函数传入数组及长度,用计数器操作。

6、main函数的参数:

main函数也可以传入参数argc ,argv[]使用命令行运行编译好的exe程序。(cmd命令详见cmd命令大全)

C++7.2.3 、7.2.4vector形参、数组形参 简介======================================================================================================一、vector 类型的形参通常,函数不应该有vector或其他标准库容器类型的形参,调用含有普通的非引用vector形参的函数将会复制vector的每一个元素。从避免复制vector的角度出发 阅读详情

相关推荐

C++函数参数传递:值、引用与指针的深度解析与实战指南

函数参数传递是编程语言中的基础概念,它定义了数据在函数调用过程中的流动方式。其核心原理在于内存模型与作用域管理,不同的传递方式决定了形参与实参的关联性及数据副本的创建机制。从技术价值看,深入理解参数传递机制对于编写高效、安全的代码至关重要,直接影响程序性能与内存使用效率。在应用场景上,无论是系统底层开发、高性能计算还是通用软件开发,都需要根据数据类型、修改需求及性能要求,在按值传递、按引用传递和按指针传递之间做出恰当选择。本文聚焦于C++中的参数传递机制,通过对比分析**按值传递**、**按引用传递**与按

anchang7456的博客 353

关于函数形参的数组真实面目

一个学弟有个小问题让帮忙解决: void main()

mkx1990xin的博客 325

three.js 载入 3D 模型的方法

三维模型的加载器ColladaLoader模型加载器。GLTFLoader模型加载器。OBJLoader模型加载器。FBXLoader模型加载器。

w418856的博客 4362

C++ 指针和引用、数组和指针、数组形参

====================================================|| 欢迎讨论技术的可以相互加微信:windgs (请备注csdn+xx职业) ====================================================|| 目录 欢迎讨论技术的可以相互加微信:windgs (请备注csdn+xx职业) 1. 指针和引用...

随意的风的专栏 1707

从Transformer到Mamba:显著性检测领域的计算效率革命(Samba框架深度解析)

本文深入解析了Samba框架在显著性目标检测(Salient Object Detection)领域的创新应用,通过结合Mamba架构的优势,实现了计算效率的革命性提升。Samba框架采用显著性引导的Mamba模块(SGMB)和上下文感知上采样(CAU),有效解决了传统CNN和Transformer的局限性,同时在RGB-D等多模态任务中展现出卓越性能。

mmm90的博客 557

PPPoE上网配置不求人:华为路由器命令行操作指南(2023最新版)

本文提供2023年最新的华为路由器PPPoE上网配置命令行操作指南。通过详细的步骤讲解,从连接设备、创建拨号接口、绑定PPPoE客户端到配置内网与NAT,手把手教你完成配置,并附有验证排错方法,助你轻松实现稳定上网。

s4t5u6v的博客 681

vector作为形参,要传递引用

数组作为形参时,传数组指针即可; 而vector作为形参时,要传引用,否则无法通过形参改变实参。 具体看代码:

ZM970307的博客 3187

告别密码明文传输:手把手带你用Python实现SRP-6协议(附完整代码)

本文详细介绍了如何使用Python实现SRP-6协议,确保密码安全传输和存储。通过零知识证明与密钥交换技术,SRP协议在不传输明文密码的情况下完成认证,适用于金融App等高安全需求场景。文章包含完整代码示例和实战技巧,帮助开发者规避常见安全陷阱。

weixin_30689307的博客 412

【C++八股】全网最全的C++语言基础八股准备(持续更新)

构造函数,构造函数初始化对象,派生类必须知道基类函数干了什么,才能进行构造;当有虚函数时,每一个类有一个虚表,每一个对象有一个虚表指针,虚表指针在构造函数中初始化;内联函数,内联函数表示在编译阶段进行函数体的替换操作,而虚函数意味着在运行期间进行类型确定,所以内联函数不能是虚函数;静态函数,静态函数不属于对象属于类,静态成员函数没有this指针,因此静态函数设置为虚函数没有任何意义。友元函数,友元函数不属于类的成员函数,不能被继承。对于没有继承特性的函数没有虚函数的说法。普通函数。.............

qq_40145095的博客 1万+

Allegro 16.6 高级技巧实战:用Region规则和动态间距搞定高密度连接器布局布线

本文深入探讨了Allegro 16.6在高密度连接器布局布线中的高级技巧,重点介绍了Region规则和动态间距属性的应用。通过局部规则覆盖和分层控制,解决0.5mm以下引脚间距的布线难题,提升PCB设计效率和质量。

weixin_30352645的博客 440

linux 内核vxlan收发包流程

1.vxlan口收包处理流程 前面几章详细介绍了vxlan接口的使用,而且已经知道vxlan是 MAC IN UDP中的封装,因此,在解封装之前,一切按照原有流程走,在此复习一下内核收发包流程(驱动层的数据处理这次不再解析,直接从__netif_receive_skb_core开始) #物理网卡处理中断,触发softirq i40e_intr └─napi_schedule_irqoff #i40e softirq把包放到per cpu backlog,触发softirq i40e_napi_p

魏言华的博客 3826

c++ 函数vector传参

vector和数组不一样,数组本身和指针差不多,所以传进去的就是一个指针。但是vector并不如此 vector传参的三种方式: void func1(vector vet); //传送数值 void func2(vector &vet); //引用 void func3(vector *vet); //指针 这三种方式产生的效果: 调用拷贝构造函数,形参改变不会影响到实参 不调用拷贝构函数,形参改变影响到实参 不调用拷贝构函数,形参改变影响到实参 如: void func1(.

h799710的博客 1万+

别再只用跳层连接了!手把手教你用DASI和MDCR模块提升红外小目标检测精度

本文详细介绍了如何利用DASI和MDCR模块提升红外小目标检测精度。通过分析传统跳层连接的缺陷,提出维度感知的特征选择性融合(DASI)和多尺度感受野精炼器(MDCR)的创新方案,显著提升小目标检测性能。实验证明,该方法在多个场景下AP@0.5提升达15.4%,特别适用于安防监控和遥感图像分析。

weixin_28715081的博客 224

C++中数组作为形参进行传递(转)

C++中数组作为形参进行传递(转) 有两种传递方法,一种是function(int a[]); 另一种是function(int *a) 这两种两种方法在函数中对数组参数的修改都会影响到实参本身的值! 对于第一种,根据之前所学,形参是实参的一份拷贝,是局部变量。但是数组是个例外,因为数组的数据太多了,将其一一赋值既麻烦又浪费空间,所以数组作为参数传递给函数的只是数组首元素的地址,数据还是在内...

cxu123321的博客 2608

Spark Catalog详解

旁边的实习生说:我想要用spark代码中对hive库中的内部表和外部表进行删除(包括数据),咋感觉网上搜了一圈都找不到解决方案啊,spark这么鸡肋吗?我:你应该静下心来好好把spark基础知识进行全面学习。实习生:难道spark有这功能,而我没有学习过?咋弄啊?我:学习一下Spark Catalog。实习生:啥是Catalog啊?Spark Catalog是Spark SQL中的一个元数据管理组件,它提供了一个集中化的存储和查询表、视图和函数的位置。

SunnyRivers 1814

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

常用的函数形参,实参传递

首先, 给出接触C语言来的第一次函数参数传递遇到的bug void swap(int x,int y) //自动建立新的临时变量作为形参,与实际值无关 { int temp; temp=x; x=y; y=temp; } int main() { int a = 5, b = 3; swap(a,b); return 0; } 由于传递的是形参,不会改变a,b的值! 要改变a,...

Harukaze 669

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++第6章:函数数组形参、可变形参,数组指针

一.数组引用形参和多维数组形参 void print(int (&arr)[10]) {..............} //如果形参里面是 (int &arr[10]) 这是引用的数组,相对于是包含10个引用的数组,这一般是非法的声明 这样的数组引用形参只能将函数作用于大小为10的数组 传递多维数组形参: 其实没有真正的多维数组,多维数组不过是数组的数组, 比如a[10][10]...

weixin_43345725的博客 612

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

函数中参数的传递

函数中参数的传递 学了一年的语言,我这个非计算机专业的编程基础真的很差,特别对于函数传参一知半解。在我看来函数的形参规定了传入的实参的数量、类型,可是一问到形参能否改变实参、引用形参等之类的问题,就大眼瞪小眼了。下面这位老哥讲得很详细,起码我看明白了。 转自老生常谈C++中实参形参的传递问题 --------------------------------分割线------------------...

qq_2501341465的博客 356

C++中的函数(一)

记录C++中函数编写过程中值得容易忽略的点

yodala的博客 1902

5.31C++:vector、基于范围的for循环配合auto、传递引用;vector对象名不能当做数组的头指针使用

1 vector类模板:容纳任何类型的容器 定义 vector可以封装任何类型的动态数组,自动创建和删除 数组下标越界检查 定义: vector<元素类型> 数组对象名(数组长度); 例: vector arr(5),建立大小为5的int数组,(动态分配内存,自动删除,越界检查) 实例 vector<double> arr(n); //创建元素个数为n的数组对象 vector<int> v = {1, 2, 3}; //创建 这条语句生成一个类,专门用来存放doubl

weixin_44478659的博客 1420

vector作为形参的三种传递方式

【代码】vector作为形参的三种传递方式。

qq_62586261的博客 864

C++数组引用传递:解决指针退化,实现类型安全与编译期大小计算

在C++编程中,函数参数传递是基础且关键的概念。当数组作为参数时,由于数组到指针的隐式转换(即指针退化),函数内部会丢失数组的维度信息,导致无法安全获取其大小,这是许多内存越界和缓冲区溢出错误的根源。为解决这一问题,现代C++引入了引用机制,它作为对象的别名,能完整保留被绑定对象的类型信息。通过声明对数组的引用参数(如 `int (&arr)[N]`),可以阻止退化过程,使得数组的维度 `N` 成为类型的一部分,从而在编译期就能通过 `sizeof` 正确计算元素个数。这种技术不仅提升了代码的安全性,还实现

weixin_34197488的博客 401

C++参数传递:值、指针、引用内存模型与实战选择指南

函数参数传递是编程语言中的基础概念,它定义了数据在函数调用过程中的流动方式。从内存模型的角度看,参数传递本质上是数据在调用栈帧间的复制或地址绑定过程。理解这一原理对于编写高效、安全的代码至关重要,尤其是在处理资源管理和性能敏感场景时。在C++中,参数传递主要分为值传递、指针传递和引用传递三种方式,每种方式在内存操作、性能开销和安全性上各有特点。值传递通过创建完整副本确保数据隔离,但可能带来拷贝开销;指针传递直接操作内存地址,灵活但需警惕空指针和内存泄漏风险;引用传递作为语法糖,兼具指针的效率与值传递的简洁性

weixin_33795743的博客 397

C++中数组作为形参的方法

原链接:https://www.cnblogs.com/abella/p/10607061.html 有两种传递方法,一种是function(int a[]); 另一种是function(int *a) 这两种两种方法在函数中对数组参数的修改都会影响到实参本身的值! 对于第一种,根据之前所学,形参是实参的一份拷贝,是局部变量。但是数组是个例外,因为数组的数据太多了,将其一一赋值既麻烦又浪费空...

qq_33374294的博客 7158
上一篇: cmd常用命令
下一篇: 实现复数的加减乘除总结
MacRd
博客等级 码龄16年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值