参数传递的数值

普通的内置类型

普通非引用类型的参数通过复制对应的实参实现形参的初始化。当用实参的副本初始化形参时,函数并没有访问调用所传递的实参的本身,因此函数不可能改实参的值。比如下面的交换两个数的程序:

 

复制代码代码如下:

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的值,只是改变了它们所指向的值。

posted @ 2017-06-08 14:04  xiaozhisir  阅读(167)  评论(0)    收藏  举报