为什么还是3,地址传递后,p不是指向地址k了吗,这样*p不是k的值吗

img

调用func,会复制p的值进去,我们假设为p1, 那么func里面的就是p1。修改了func里面的p,就相当于修改了p1, 但是外部的p并没有被修改。
指针指向一个空间,指针本身也有一个值,那就是地址。我们传参指针,实际是将这个地址值传过去。

应该是变量作用域的关系,如果不写在函数里面,直接写 *p = &k,结果应该是 3 2

func(p)传递的是a的值,不是p的地址

//假设k的地址是0x200
//假设a的地址是0x100, p的!地址!是0x104,p的!值!是0x100
//则执行func时
void func(int *p)//这个参数p的!值!是0x104, 它的地址并不是0x104(C中调用层次中参数一般放在堆栈中,所以这个p的是存放在堆栈中的某个位置,假设它存放在0x0010处), 它是参数p,和main中的p不是一个东西
{
    p=&k;//执行完这个后,实际只把地址0x0010处的内容改成了0x200, 并没有影响main中的那个p
}