首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

指针传值的小不解

2013-04-21 
指针传值的小困惑/* swap3.c -- using pointers to make swapping work */#include stdio.hvoid interch

指针传值的小困惑

/* swap3.c -- using pointers to make swapping work */
#include <stdio.h>
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指向的对象的值才可以
[解决办法]
变量存储好后,它的地址是不会变的。除非你重新给它们分配内存。
就像人出生后,出生地是不会变的。(难道你还能重新出生一次)。
除非重新投胎,进入六道轮回。

热点排行