&引用;赋值的左操作数所需的左值;在C中使用指针时

&引用;赋值的左操作数所需的左值;在C中使用指针时,c,pointers,C,Pointers,我想练习C语言中的指针。我得到一个错误,显示“赋值的左操作数需要左值”。错误显示为at&y=&x。那我怎么能把x的地址改成y int main() { int x=3; int y=4; &y=&x; printf("x=%p,y=%p",&x,&y); return 0; } 变量的地址是不可变的。它们是不允许改变的 您可以将该地址存储在指针变量中,然后将该指针更改为指向其他对象: int x=3, y=4; int *

我想练习C语言中的指针。我得到一个错误,显示“赋值的左操作数需要左值”。错误显示为at&y=&x。那我怎么能把x的地址改成y

int main()
{
    int x=3;
    int y=4;
    &y=&x;
    printf("x=%p,y=%p",&x,&y);
    return 0;
}

变量的地址是不可变的。它们是不允许改变的

您可以将该地址存储在指针变量中,然后将该指针更改为指向其他对象:

int x=3, y=4;
int *p;

p = &x;
*p = 2;
printf("p=%p, &x=%p\n", (void *)p, (void *)&x);  // prints same value both times
printf("x=%d\n", x);   // prints 2

p = &y;
*p = 7;
printf("p=%p, &y=%p\n", (void *)p, (void *)&y);  // prints same value both times
printf("y=%d\n", y);   // prints 7

&y
无法重新分配。该位置是在编译时静态分配的,您不能在运行时更改它。

y是一个变量,&y不是,因此不能更改&y只是获取该变量地址的一种方法。

&y
只是变量的地址
y
--您不能更改内存地址本身--您只能更改存储在该地址的内容。嗯,只有在运行时操作系统虚拟内存管理器才会分配地址本身,etc.。@DavidC.Rankin已分配。即使excat位置不是,也会以某种方式分配它,比如
fixed
(有时用于全局),或
SP+offset
regisrr
,或dynamic
heap
等。一旦分配它,就不能在C中更改它。他试图设置变量
y
的地址,该地址在
main
启动时绑定,在编译器设置的位置。绑定位置可以在有垃圾收集器的语言中更改,而不是通过C。是的,是的,这就是我认为您的目的。偏移量。所以你刚才说的作业有点混乱。