地址分配中的问题

时间:2012-03-22 04:45:09

标签: c pointers

在这个C代码中,我尝试将一个变量的指针地址分配给其他变量,然后再进行一些更改。

#include<stdio.h>
void change(int *x)
{
    int *z;
    z=x+5;
    printf("%u\n",z);
    x=z;
    printf("%u\n",x);
}
int main()
{
    int *p;
    int y=2;
    p=&y;
    printf("%u\n",p);
    change(p);
    printf("%u\n",p);
    return 0;
}

输出是:

2280640
2280660
2280660
2280640

有人可以解释为什么输出2280640的最后一行。我认为应该是2280660。

1 个答案:

答案 0 :(得分:7)

您正在通过值传递指针。指针p的副本将传递给函数change(),而不是指针p本身。

为了能够在功能中修改p,您必须通过引用传递

void change(int **x) 

并将其命名为

 change(&p);

并在change内进行分配

 *x = z;