指针传值的小困惑
/* swap3.c -- using pointers to make swapping work */
#include
void interchange1(int * u, int * v);
int main(void)
{
int x = 5, y = 10;
printf("Originally x = %d and y = %d.\n", x, y);
interchange1(&x, &y); /* send addresses to function */
printf("Now x = %d and y = %d.\n", x, y);
return 0;
}
void interchange(int * u, int * v)
{
int temp;
temp = *u; /* temp gets value that u points to */
*u = *v;
*v = temp;
}
void interchange1(int * u, int * v) //直接交换u和v不就可以吗?
{
int *temp=NULL;
*temp = u; /* temp gets value that u points to */
u = v;
v = *temp;
}指针传值改写形参的两个值,为什么不能直接交换指针变量那?他们存储的都是变量的地址,
交换了地址不就可以吗?运行程序死掉?求解?
------解决方案--------------------
(1)*temp 和 u 都不属于同一类型,怎么可以赋值呢;
(2)如果是temp = u;
u = v;
v = temp这还是改变不了x和y的值,因为这样只是改变了u和v两个指针所指的地址,而x和y的值没有变化。
------解决方案--------------------
引用:引用:
指针u和v是形参,交换他们的值没有作用,也就是他们的指向互换了不能影响到实参x和y的值,必须交换他们指向的对象的值(也就是x和y)才可以。
ps:28行编译都不会通过的,*temp表示一个int,而u和v是int类型的指针变量,不可以赋值的额 写错了 指针u和v不是存的实参x和y的地址吗 交换x和y的地址不行么现在假设有x和y两个盒子,里边装了不同的东西,有两个纸条(相当于指针)u和v,函数调用时传入x和y的地址,相当于在纸条
u和v上分别写上"盒子x"和"盒子y",交换指针的做法就相当于两个纸条的内容做了交换,也就是说现在纸条u表示记录着"盒子y",v记录着"盒子x",这对于盒子x和y没有任何影响,之所以传实参的地址进来就是想通过这个地址来改变实参的值,你只交换了u和v的值有用吗?记住u和v也是变量(指针变量)必须交换u和v指向的对象的值才可以
------解决方案--------------------
变量存储好后,它的地址是不会变的。除非你重新给它们分配内存。
就像人出生后,出生地是不会变的。(难道你还能重新出生一次)。
除非重新投胎,进入六道轮回。