关于函数的参数的不同用法(变量,引用,指针、数组)

1、值传递(实参和形参均为变量)

void changeVaule(int a)
{
	a = 8;
}
int main()
{
	int b = 1;
	changeVaule(b);
	cout << b <<endl;//输出结果为1
}

这种值传递方式,实参 b 传递给形参 a ,只是发生了该内存内容上的一个拷贝,所以不会改变原来的值。

2:引用传递(形参是一个引用)

void changeVaule(int &a)
{
	a = 8;
}
int main()
{
	int b = 1;
	changeVaule(b);
	cout << b <<endl;//输出结果为8
}

解释:此时形参变成了一个引用,也就是形参 a 变成了实参 b 的一个别名,用此方法可以改变实参原来的值,此方法进行参数传递效率比较高。

3:地址传递

(1)、指针(形参和实参均为指针)

void changeVaule(int *a)
{
	*a = 8;
}
int main()
{
	int b = 1;
	changeVaule(&b);
	cout << b <<endl;//输出结果为8
}

解释:实参将地址传递给了形参,两个元素共用一段内存(共用同一个地址),因此形参 a 的值发生改变,实参 b 的值也会发生改变。

(2)、数组(实参和形参均为数组)

void changeVaule(int a[5])
//void changeVaule(int a[])//也可以写成这样。因为形参数组大小可以不指定,即便指定了也可以与实参数组大小不一致,因为C编译器对形参数组大小不做检查,只是将实参数组的首地址传递给形参
{
	a[3] = 1;
	a[4] = 2;
}
int main()
{
	int b[5] ={3,4,5,6,7};
	changeVaule(b);
	for(int i=0;i<5;i++)
	{
		cout << "i = " << i << "  b["<<i<< "] = "<< b[i] << endl;//输出结果3,4,5,1,2
	}
}

解释:这种传递方式其实和指针相似,都是地址传递,实参将数组 b[5] 首地址传递给了形参数组 a[5] ,这样两个数组就会占用一段内存,如果形参数组 a[5] 内容发生变化,那么实参数组内容也会发生变化。

(3)、形参指针,实参数组

void changeVaule(int *p)
{
	*(p+2)  = 888;//等价于改变数组的第3个元素
}
int main()
{
	int b[5] ={3,4,5,6,7};
	changeVaule(b);
	for(int i=0;i<5;i++)
	{
		cout << "i = " << i << "  b["<<i<< "] = "<< b[i] << endl;//输出结果3,4,888,6,7   
	}
}
解释:其实也没啥好解释的,只是换了一种写法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值