读书人

the significance of pointer解决思路

发布时间: 2013-08-10 21:14:06 作者: rapoo

the significance of pointer

void swap(int x, int y)   /*version 1 without using the pointer*/
{
int temp;
temp = x;
x = y;
y = temp;
}


void swap(int *px, int *py)  /*version 2 using the pointer*/
{
int temp;
temp = *px;
*px = *py;
*py = temp;
}


书上介绍使用pointer的意义的时候拿这两个版本做对比,说version 1不能够影响“the arguments a and b in the routine that called it" 这句话不是太懂,难道version 1里不是把x和y的值给交换了吗?这还不叫影响吗?

相对而言,我觉得version 2的功效和和version 1是一样的啊,都是把x,y值给互换了,为什么version 2就算是好的呢?

我们为什么要用pointer呢?
各位给点看法。。。
[解决办法]
引用:
Quote: 引用:

楼主新手,应该理解下形参与实参的不同,以及值传递和地址传递 引用传递
version1里参数的传递方式是值传递,比如当调用这样调用时
int x1=5,y1=3;
swap(x1,y1);

void swap(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
}
x1的值赋值给了x,y1的值赋值给了y,swap只是交换了x和y的值,x1和y1不受影响。

version2中如下调用:
int x1=5,y1=3;
int *px1=&x1,*py1=&y1;
swap(px1,py1);

void swap(int *px, int *py) /*version 2 using the pointer*/
{
int temp;
temp = *px;
*px = *py;
*py = temp;


}
px1的值赋值给了px,py1的值赋值给了py,即px1和px的值都是x1的地址值,py1和py都是y1的地址值。swap交换了px和py所指向的两个int的值,也是px1和py1所指的两个内存空间,即交换了x1和y1的值。



的确是刚学,多多包涵。。。

version1里什么是x1的值赋给x? x不就是一个参数名称可以随便换吗,x1不就是x吗? 迷糊了。。。。难道说swap运行之后,x1和y1的值不会互换?(变成x1=3, y1=5)


形参x是临时变量、、是swap被调用时临时生成的,不是x1,他们所存的值相同而已,他们是不同的内存地址空间。

当然如果你看一下函数调用时的汇编代码,就知道形参x和y是在调用swap前入栈,而x1和y1在这之前早就建立了,,
[解决办法]


新手 要弄清楚 传的是地址还是值

地址和值的 区别

int a = 10;
// a = 10;// 这是在内存中需要内存空间来保存的,
//计算机就是通过内存空间地址对它进行操作的, 也就是&a ,标识它的地址
//当你直接传值的话,相当于拷贝了一份值出来,
//这个时候拷贝的一份值,也有自己的内存地址的,所以不会对原来的数本身进行操作的

读书人网 >C++

热点推荐