c语言为什么传指针不传值,指针传值的小不解

指针传值的小困惑

/* 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指向的对象的值才可以

------解决方案--------------------

变量存储好后,它的地址是不会变的。除非你重新给它们分配内存。

就像人出生后,出生地是不会变的。(难道你还能重新出生一次)。

除非重新投胎,进入六道轮回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值