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
方案.
是的,你用表格说明的内容大致是正确的.变量名称在编译时分配给地址.这称为"符号表",类似于问题中的左侧表格.程序运行时,变量名称不再出现在可执行文件中,并且只有右侧表格中的地址.
如果是这样,如果初始变量不是int而是结构,那么同样的逻辑是否成立?
是的,a struct
是一个值,因此为变量分配地址并为该地址赋值的方式相同.不同之处在于,struct
可能需要更多的内存而不是int
依赖于其成员.这会影响下一个变量可用的地址.
请注意,分配的地址将偏离某些基本内存地址.当OS加载可执行文件时,它会提供此基址,并且可执行文件通过将偏移量添加到基址来计算绝对内存地址.
如果您有兴趣了解有关其工作原理的更多信息,可以更详细地学习编译器和操作系统.
归档时间: |
|
查看次数: |
108 次 |
最近记录: |