C++函数的参数传递

本文深入探讨了C++中函数参数的传递方式,包括值传递、指针形参、引用参数及数组形参的特点和使用场景,对比了各种传递方式的效率和功能,帮助读者理解和掌握C++函数调用机制。

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

C++函数的参数传递

值传递

即将实参的值拷贝给形参,形参和实参是两个相互独立的对象,在函数体内对形参所做的所有操作都不会改变实参的值。

指针形参

将指针作为形参实质与值传递一样,即执行指针拷贝工作将实参(指针的值)赋给形参,拷贝后两个指针是不同的指针,但它们指向同一个对象,所以我们可以间接的访问它所指的对象并修改它,但在函数体内修改被赋值指针本身的值并不会改变实参(被传入指针的值)。
(ps:这块表达不是很好,大概意思是指针形参和值传递类似,在函数体内修改传入的指针的值并不会影响实参本身的值,因为两个指针是不同的指针)
下面是一个示例:

void reset(int *point)
{
	*point = 10;		// 改变point所指对象的值
	point = 0;		// 只改变了point的局部拷贝,实参的值并未改变
}

int n = 5;
reset(&n);	// 改变n的值并非n的地址
cout << "n = " << n << endl;	// 输出n = 10

传递引用参数

因为对于引用的操作实质上是对于作用在引用所引的对象上,所以我们可以将函数的形参设置为引用类型,通过使用引用形参,允许函数改变一个或者多个实参的值。同时,传递引用参数也比值传递效率要高,且方便修改实参的值。

// 使用引用参数重写reset函数
void reset(int &i)
{
	i = 10;
}

int i = 4;
reset(i);
cout << "i = " << i << endl;

如果函数无需改变引用形参的值,将其声明为常量引用即可

数组形参

数组有两个特殊性质,一是不允许拷贝数组,二是使用数组时通常会将其转化为指针。因为数组会被转换为指针,所以我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针。

void arrSize(const char str_arg[100])
{
	cout << sizeof(str_arg) << endl;
}
int main()
{
	char str[] = "Hello";
	cout << sizeof(str) << endl;	// 会输出6
	arrSize(str);		// 会输出4,因为传递的是指向数组首元素的指针
	return 0;
}

我们可以将形参写成类似数组的形式:

void fun(const int*);
void fun(const int []);
void fun(const int [10]);

尽管表现形式不同,但上面三个数组是等价的,每一个函数参数都是const int*类型。如果我们传递给fun函数的是一个数组,则实参的值自动转换为指向数组首元素的指针,数组大小对函数调用没有影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值