考虑一个典型的环境,为什么以下代码在C中是非法的?
{ int x; &x = (int*) malloc(3*sizeof(int)); ... }
Daniel LeChe.. 31
你不能为地址分配东西,x
因为他的地址x
不是左值
(一个lvalue
是"的东西,可以被分配给",即,它不能是对大号的EFT侧等号)
尝试
int* x; x = (int*) malloc(3*sizeof(int)); // TODO: Call free(x)
现在x
指向你分配的内存,你可以做类似的事情
int foo = *x; int bar = x[0];
您可分配的地址x
,以通过使用别的东西,&
操作是这样的:
int x = 1; int* y = &x; // y now holds the address of x *y = 2; // Now x = 2
小智.. 11
因为x的地址不是左值 - 它不是可以修改的东西.C允许您更改地址指向的内容 - 它不允许您自己更改地址.
你不能为地址分配东西,x
因为他的地址x
不是左值
(一个lvalue
是"的东西,可以被分配给",即,它不能是对大号的EFT侧等号)
尝试
int* x; x = (int*) malloc(3*sizeof(int)); // TODO: Call free(x)
现在x
指向你分配的内存,你可以做类似的事情
int foo = *x; int bar = x[0];
您可分配的地址x
,以通过使用别的东西,&
操作是这样的:
int x = 1; int* y = &x; // y now holds the address of x *y = 2; // Now x = 2
因为x的地址不是左值 - 它不是可以修改的东西.C允许您更改地址指向的内容 - 它不允许您自己更改地址.