变量如何与C中的值相关联?

Net*_*ite 4 c memory variables pointers

如果你有一行代码,如

int num = 4;
Run Code Online (Sandbox Code Playgroud)

这会导致以下表格吗?

VARIABLE|ADDRESS   ADDRESS|VALUE
num     |0001      0001   |4
Run Code Online (Sandbox Code Playgroud)

如果你那么说

int* num_p = #
Run Code Online (Sandbox Code Playgroud)

这会导致以下表格吗?

VARIABLE|ADDRESS   ADDRESS|VALUE
num     |0001      0001   |4
num_p   |0002      0002   |0001
Run Code Online (Sandbox Code Playgroud)

然后说

int** num_pp = &num_p;
Run Code Online (Sandbox Code Playgroud)

结果如下表?

VARIABLE|ADDRESS   ADDRESS|VALUE
num     |0001      0001   |4
num_p   |0002      0002   |0001
num_pp  |0003      0003   |0002
Run Code Online (Sandbox Code Playgroud)

等等?如果是这样,如果初始变量int不是a而是a ,那么同样的逻辑是否成立struct

编辑:检查什么的地址实际上样子,而不是这个由在这个问题上的信息的意见0001,0002,0003方案.

编辑2:这个问题的答案指出变量不一定必须有一个地址.对早期问题的回答也是如此.

Cod*_*ice 7

是的,你用表格说明的内容大致是正确的.变量名称在编译时分配给地址.这称为"符号表",类似于问题中的左侧表格.程序运行时,变量名称不再出现在可执行文件中,并且只有右侧表格中的地址.

如果是这样,如果初始变量不是int而是结构,那么同样的逻辑是否成立?

是的,a struct是一个值,因此为变量分配地址并为该地址赋值的方式相同.不同之处在于,struct可能需要更多的内存而不是int依赖于其成员.这会影响下一个变量可用的地址.

请注意,分配的地址将偏离某些基本内存地址.当OS加载可执行文件时,它会提供此基址,并且可执行文件通过将偏移量添加到基址来计算绝对内存地址.

如果您有兴趣了解有关其工作原理的更多信息,可以更详细地学习编译器和操作系统.