C++ Primer阅读笔记--参数传递

news2024/11/22 15:18:14

目录

1--三种基本传递方式

2--数组形参

3--main函数传递参数

4--传递可变形参


1--三种基本传递方式

① 值传递:

        使用值传递时,初始值会拷贝给变量,对变量的改动不会改变初始值的值;

② 指针传递:

        使用指针传递时,同样会发生拷贝操作,拷贝的内容是指针的值;拷贝之后,初始指针和拷贝指针是两个不同的指针,这两个指针都能修改所指对象的值,因此指针传递可以修改初始值;

③ 引用传递:

        使用引用传递时,不会发生拷贝操作,形参相当于初始变量的一个别名,修改形参会修改初始值;

        一般建议使用引用传递进行参数传递,避免不必要的拷贝花销;        

        当函数无须改变引用形参的值时,一般将其声明为常量引用

2--数组形参

        数组具有两个特殊的性质:不允许拷贝数组使用数组时会将其转换为指针;因此在函数中传递一个数组时,实际上传递的是指向数组首元素的指针

3--main函数传递参数

// 方式1
int main(int argc, char *argv[]){...}
// 方式2
int main(int argc, char **argv){...}

        上述两个方式功能等价,第一个形参 argc 表示数组中字符串的数量,第二个形参 argv 表示一个数组,其元素是指向 C 风格字符串的指针;其中 argv[0] 表示程序的名称;

4--传递可变形参

        C++11 新标准提供两种方法处理不同数量实参的函数,第一种是使用 initiallizer list 的标准库类型,其适用于不同数量但类型相同的实参传递;第二种是编写可变参数模板,用于处理不同数量且类型不同的实参传递;

#include <iostream>

// 打印输入的参数列表,其元素类型为 string 类型
void errorPrint(std::initializer_list<std::string> lst)
{
    for(auto beg=lst.begin();beg!=lst.end();++beg){
        std::cout << *beg << " ";
    }
    std::cout << std::endl;
}

void test()
{
    std::string s1, s2;
    std::cout << "Input s1: " << std::endl;
    std::getline(std::cin, s1);
    std::cout << "Input s2: " << std::endl;
    std::getline(std::cin, s2);
    if(s1 != s2){
        errorPrint({"functionX", s1, s2}); // 当 s1 != s2时,将打印输入的所有参数 
    }
    else{
        errorPrint({"functionX", "okay"}); // 传入 2 个参数
    }
}

int main(int argc, int *argv[]){
    test();
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/490589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql 查询性能优化

查看数据库用户连接数量 show processlist;分析表结构 索引 show index from conference;查询锁状态 show status like %lock%;是否开启慢查询 show variables like %slow_query_log%;日志查询默认情况下&#xff1a;slow_query_log的Value为OFF 如要开启慢查询日志&#…

2023最新软件测试面试题汇总

常见的面试题汇总 1、你做了几年的测试、自动化测试&#xff0c;说一下 selenium 的原理是什么&#xff1f; 我做了五年的测试&#xff0c;1年的自动化测试&#xff1b; selenium 它是用 http 协议来连接 webdriver &#xff0c;客户端可以使用 Java 或者 Python 各种编程语言…

AI奇点将至 如何成为人工智能驱动型公司

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 2023年4月16日&#xff0c;中泰证券首席经济学家李迅雷先生发表了《奇点将至&#xff1a;AI或开启新一轮科技革命》的文章。李迅雷先生认为&#xff0c;以智能化为特征的第四次工业革命轮廓日渐清晰&#xff0c;在世界百年未…

Linux网络编程:socket、客户端服务器端使用socket通信

socket socket&#xff08;套接字&#xff09;&#xff0c;用于网络中不同主机间进程的通信。 socket是一个伪文件&#xff0c;包含读缓冲区、写缓冲区。 socket必须成对出现。 socket可以建立主机进程间的通信&#xff0c;但需要协议&#xff08;IPV4、IPV6等&#xff09;…

[230507]托福听力真题TPO66词汇 |无重复|20:50~21:55 + 8:00~8:30

目录 conversation 1 conversation 2 ​ TPO66 Lecture ppt词汇 TPO66 Lecture 笔记词汇 conversation 1 conference / ˈkɑːnfərəns /n 会议terrific / təˈrɪfɪk /adj 极好的presentation / ˌpriːz(ə)nˈteɪʃ…

发送Ajax get请求详解

发送AJAX get请求&#xff0c;前端代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>ajax get请求</title> </head> <body> <script type"text/java…

第三十一章 Unity骨骼动画

关于骨骼动画的原理&#xff0c;我们这里不再详细介绍&#xff0c;有不清楚的可以回去看DirectX课程和3dsMAX课程。接下来&#xff0c;我们来讲解一下Unity的骨骼动画系统。Unity 的动画系统基于动画剪辑&#xff08;Animation Clip&#xff09;的概念&#xff0c;它的本质就是…

Linux 安装时,各个分区的作用是什么?

在这里&#xff0c;我说说一开始Linux为什么需要分区。 因为 Linux 是一个多用户操作系统。 多用户意味着一个问题&#xff1a;并非所有用户的操作都是可控的。 而系统正常运行的话&#xff0c;必须要一定的剩余空间。 这也就意味着&#xff1a;如果一个用户自己把空间占满…

MySQL数据库之用户管理

一、数据库用户管理 1.1 新建用户 CREATE USER 用户名来源地址 [IDENTIFIED BY [PASSWORD] 密码]; 即&#xff1a;create user 用户名源地址 identified by 密码; 用户名&#xff1a; 指定将创建的用户名 来源地址&#xff1a; 指定新创建的用户可在哪些主机上登录&…

线段树练习题(日程安排表、LC-307、LC-2407、LC-699)

线段树详解&#xff1a;https://leetcode.cn/problems/range-module/solution/by-lfool-eo50/ 文章目录 线段树线段树模板[729. 我的日程安排表 I](https://leetcode.cn/problems/my-calendar-i/)[731. 我的日程安排表 II](https://leetcode.cn/problems/my-calendar-ii/)[732.…

数据库基础及用户管理授权

数据库概念 关系型数据库 数据结构二维表格 库 -> 表 -> 列&#xff08;字段&#xff09;&#xff1a;用来描述对象的的一个属性&#xff1b;行&#xff1a;用来描述一个对象的信息 mysql&#xff08;5.7/8.0&#xff09; maridb ocracle postgresql sqlserver(windows…

2D火焰特效

Unity面片实现火焰效果 一、效果说明 大家好&#xff0c;我是阿赵。这是一个火焰的效&#xff0c;不过它不是粒子做的&#xff0c;是用一个面片做的&#xff0c;可以理解成是2D的特效。这个例子很简单&#xff0c;但可以拓展一下思路&#xff0c;原来除了用序列帧和粒子做动画…

将页面元素隐藏的10种方法

在Web开发中&#xff0c;隐藏页面元素使其视觉不可见是一个非常常见的需求。为了实现这一目标&#xff0c;我们通常会采用多种方法&#xff0c;最常用的例如CSS的display属性&#xff0c;只要设置为node即可隐藏元素。 本文将通过对当前所有可用的隐藏元素的方法做一个总结&…

Flink系列-11、Flink DataStream的Sink

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址&#xff1a;https://flink.apache.org/ 学习资料&#xff1a;https://flink-learning.org.cn/ 目录 Flink在批处…

云效/git 删除特殊字符远程分支

云效/git 删除特殊字符远程分支 一、查看所有分支二、删除分支三、验证 在使用云效时&#xff0c;不小心添加了一个错误分支 de’vdev &#xff0c;在云效手动删除时&#xff0c;报错“找不到分支”&#xff0c;无法删除。只能启动git命令进行查看&#xff0c;将步骤总结如下&a…

【JAVA】#详细介绍!!! 文件操作之文件内容操作(2)!

本文主要是针对文件内容的操作进行展开&#xff0c;文件内容操作无非就两种 1.针对文件进行“读” 2.针对文件进行“写” 目录 文件内容读写的形式 字符流 字节流 文件内容操作 InputStream&#xff1a;以字节流的形式进行读操作 创建方式&#xff1a; FileInputStream的…

2023年深圳CPDA数据分析师认证到这里就对了哦

CPDA数据分析师认证是大数据方面的认证&#xff0c;助力数据分析人员打下扎实的数据分析基础知识功底&#xff0c;为入门数据分析保驾护航。 帮助数据分析人员掌握系统化的数据分析思维和方法论&#xff0c;提升工作效率和决策能力&#xff0c;遇到问题能够举一反三&#xff0c…

MySQL索引的底层实现原理

索引的底层实现原理 数据库索引是存储在磁盘上的&#xff0c;当数据量大时&#xff0c;就不能把整个索引全部加载到内存了&#xff0c;只能逐一加载每一个磁盘块&#xff08;对应索引树的节点&#xff09;&#xff0c;索引树越低&#xff0c;越“矮胖”&#xff0c;磁盘IO次数…

主动式和被动式电容笔的区别在哪?苹果平替笔性价比高的

被动式电容笔与主动式电容笔最大的不同之处在于主动式电容笔具有更加广泛的应用领域&#xff0c;可以与各种种类的电容式屏幕相匹配。随着对电容笔的了解&#xff0c;电容笔的使用也日益广泛。而且平替电容笔的制造工艺已经日趋成熟&#xff0c;正在走向实用&#xff0c;并且已…

易观千帆 | Q1运营报告:手机银行MAU超5.3亿,行业“内卷”超出想象

易观&#xff1a;由中国电子银行网、易观分析联合发布的“2023中国手机银行综合运营报告”显示&#xff1a;在经济企稳回升的大背景下&#xff0c;中国手机银行第一季度综合运营指数季度内呈平稳上升态势&#xff0c;手机银行活跃人数环比增幅逐月递增&#xff0c;促使活跃用户…