学习C++——参数传递

本文详细介绍了C++中的参数传递,包括传值参数、传引用参数、const形参与实参、数组形参以及含有可变形参的函数的使用方法。重点讲解了引用如何避免拷贝,const形参的限制,以及如何通过引用返回多个结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数传递

1、传值参数(实参初始化形参)

  • 普通形参(int,char.....)
  • 指针形参(int * ,char *.....)

2、传引用参数(引用是实参的别名)

  • 使用引用避免拷贝(尤其是比较大的类或者是容器对象)
当不需要修改对象时,将其声明为常量引用。 bool  isShorter(const  string &str1, const string &str2);
  • 使用引用形参返回额外信息(当函数需要返回多个值的时候,引用为我们一次返回多个结果提供了途径)
void find_char(const string &s, char c, int &cnt);

3、const 形参和实参

  • void  fun(const  int  i);函数内部可以读取i,但是不能向i写入值。调用fun函数时,可以传入const   int 类型的值,也可以传入int 类型的值。
  • 指针或引用形参与const
int i = 23;
const int *cp = &i;//正确,但是不能通过*cp来改变i的值
const int &r = i;//正确,但是不能通过r来改变i的值
const int &r2 = 24;//正确,允许一个常量引用绑定一个字面值
int *p = cp;//错误,p和cp的类型不同
int &r3 = r;//错误,r3和r的类型不同
int &r4 = 24;//错误,非常量引用不能绑定一个字面值
  • 尽量使用常量引用(如果形参是普通引用,则不能传递字面值和const对象)

4、数组形参

  • 不能以值传递的方式传递数组,但是我们可以把形参写成类似数组的形式
void print(const int *);
void print(const int []);
void print(const int[10]);//指期望数组含有10个元素
我们把三个函数的形参都定义为指向const 的指针。当函数不需要对数组元素进行写操作的时候,数组形参应该是指向const指针。只有当函数确实要改变元素值的时候,才把形参定义为非常量指针。
  • 数组引用形参
void print (int (&arr)[10] );//arr是具有10个整数的整型数组的引用
void print (int &arr[10]  );//arr声明为引用的数组
  • 传递多维数组
当将多维数组传递给函数的时候,真正传递的是指向数组首元素的指针。
int *matrix[10];//10个指针构成的数组
int (*matrix) [10];//指向含有10个整数的数组的指针
void print(int matrix[][10], int rowSize);//matrix看起来是一个二维数组,实际上形参是指向含有10个整数的数组的指针。
  • main函数中的参数(命令行选项)
int main(int argc, char *argv[])
/*
	第一个形参argc表示数组中字符串的数量。
	第二个形参argv是一个数组,argv指向char*。
	当实参传递给main函数之后,argv的第一个元素指向程序的名字或者是一个空字符串,
	接下来的元素依次传递命令行提供的实参。最后一个指针之后的元素值保证为0;	
*/
/*
	例如:如果在命令行中输入, prog -d -o file data
	这些命令行通过两个形参传递给main函数。
	argv[0] = "prog";
	argv[1] = "-d";
	argv[2] = "-o";
	argv[3] = "file";
	argv[4] = "data";
	argv[5] = 0;
*/
当使用argv中的实参时,可选的实参时从argv[1]开始的。argv[0]保存程序的名字。

5、含有可变形参的函数

为了编写能够处理不同数量实参的函数,C++11提供了两种主要的方法:
  • 如果所有的实参类型相同,可以传递一个名为initializer_list的标准库类型。
  • 如果实参的类型不同,可以编写一个特殊的函数,也就是所谓的可变参数模板。
C++还有一种特殊的形参类型,即省略符,可以用它传递可变数量的实参。(这种功能一般只用于与C函数交互的接口程序)
void fun(parm_list, ...);
void fun(...);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值