我是一个C导师和开发人员,试图加深我对编译过程中所发生的事情的理解。我遇到了C教程,它说
编译后的
没有更多的变量名,只有地址
我假设=运算符的左操作数必须是一个地址!
按照这个逻辑,可以安全地假设x=9的程序集命令如下:
将文字9放入x地址
那么,用自己的地址替换lvalue x不是很安全吗?
如果是的话-为什么不能直接给出地址:
&x=9
在我看来,这将导致相同的程序集命令。
毕竟,左边的这个l值将被计算到它的地址,这个地址将作为一个操作数发送给=操作符。
发布于 2022-07-25 13:44:48
变量只是内存的一部分。假设整数是4个字节长。
int x;
/* ... */
x = 9;简化:x必须存储在内存中的某个地方。存储单元是通过它们的地址来识别的。编译器和链接器将人类可读的符号x转换为内存中某些内存单元的地址。机器代码指令编写一些值(在我们的例子中是4个字节),表示数字9。在大多数现代实现中,它将是9,0,0,0。
在现实生活中,它可能更复杂,因为编译器可以将其保存在寄存器中或完全优化它。
如果是的话,为什么不能直接给出地址,如:
:&x=9
&x是对对象x的引用。您不能分配它,因为它是内存中的一个固定位置(您不能更改它)。但是你当然可以取消对这个位置的访问。
*&x = 9;引用(地址)可以分配给指针。
int x = 0;
int *pointer = &x;https://stackoverflow.com/questions/73109927
复制相似问题