地址分配中的问题

Rog*_*ews 2 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;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

2280640
2280660
2280660
2280640
Run Code Online (Sandbox Code Playgroud)

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

Alo*_*ave 7

您正在按值传递指针.指针的副本p传递给函数change()而不是指针p本身.

为了能够p在函数内部进行修改,您必须通过引用传递它.

void change(int **x) 
Run Code Online (Sandbox Code Playgroud)

并称之为

 change(&p);
Run Code Online (Sandbox Code Playgroud)

和里面change做作业

 *x = z;
Run Code Online (Sandbox Code Playgroud)