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

文章详细介绍了C++中的四种参数传递方式:值传递(无法修改初始值)、指针传递(可修改初始值)、引用传递(形参为初始值别名)以及如何通过数组形参和main函数传递参数。此外,还讨论了C++11中处理可变形参的方法,如使用`std::initializer_list`和可变参数模板。
摘要由CSDN通过智能技术生成

目录

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();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值