为什么以下C代码非法?

3 c pointers addressof

考虑一个典型的环境,为什么以下代码在C中是非法的?

{
int x;
&x = (int*) malloc(3*sizeof(int));
...
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*ant 31

你不能为地址分配东西,x因为他的地址x不是左值

(一个lvalue是"的东西,可以被分配给",即,它不能是对大号的EFT侧等号)

尝试

int* x;
x = (int*) malloc(3*sizeof(int)); // TODO: Call free(x) 
Run Code Online (Sandbox Code Playgroud)

现在x指向你分配的内存,你可以做类似的事情

int foo = *x;
int bar = x[0];
Run Code Online (Sandbox Code Playgroud)

您可分配的地址x ,以通过使用别的东西,&操作是这样的:

int x = 1;
int* y = &x;  // y now holds the address of x
*y = 2;       // Now x = 2
Run Code Online (Sandbox Code Playgroud)


小智 11

因为x的地址不是左值 - 它不是可以修改的东西.C允许您更改地址指向的内容 - 它不允许您自己更改地址.