c语言为什么传指针不传值,指针传值的小不解
发布日期:2021-06-24 15:43:58 浏览次数:2 分类:技术文章

本文共 1289 字,大约阅读时间需要 4 分钟。

指针传值的小困惑

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

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

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

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

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

转载地址:https://blog.csdn.net/weixin_33613462/article/details/117244106 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:android 模拟器 启动,android开发之启动模拟器并安装游戏apk
下一篇:热传导方程的差分解法c语言,九热传导方程的差分解法.PPT

发表评论

最新留言

不错!
[***.144.177.141]2024年04月04日 06时11分52秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章