参数传递的数值
普通的内置类型
普通非引用类型的参数通过复制对应的实参实现形参的初始化。当用实参的副本初始化形参时,函数并没有访问调用所传递的实参的本身,因此函数不可能改实参的值。比如下面的交换两个数的程序:
复制代码代码如下:
void swap(int v1, int v2)
{
int temp = v1;
v2 = v1;
v1 = temp;
}
swap(a, b);// 调用swap
上面程序中,实参为a与b,但是在调用时,v1与v2接受的是a与b的副本,所以实际上a与b的值没有变化。
2)指针形参
函数的形参可以是指针,此时将复制实参指针,其实这类跟1)原理类似,函数内并无法改变实参的指针值。只是函数可以通过复制到的地址改变实参指针所指向的值。
复制代码代码如下:
void swap(int* v1, int* v2)
{
int temp = *v2;
*v2 = *v1;
*v1 = temp;
}
int main()
{
int a = 10,b = 20;
int *p1 = &a,*p2 = &b;
swap(p1,p2);
return 0;
}
上面程序中定义的swap的形参为指针类型,main中调用swap,实际上swap并不能改变p1与p2的值,只是改变了它们所指向的值。

浙公网安备 33010602011771号