当前位置:  开发笔记 > 编程语言 > 正文

为什么以下C代码非法?

如何解决《为什么以下C代码非法?》经验,为你挑选了2个好方法。

考虑一个典型的环境,为什么以下代码在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允许您更改地址指向的内容 - 它不允许您自己更改地址.



1> Daniel LeChe..:

你不能为地址分配东西,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



2> 小智..:

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

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有