考虑以下代码行:
char a = 'a';
char b = 'b';
int ai[] = { 1, 2 };
int i = 0;
假设字长是 32 位,一个 int 是 32 位,并且 内存分配的顺序与 从地址位置 68 开始的声明。
画出效果图 执行以下代码行。
for (i = 0; i < 8; i++)
*(&a – i) = 'z';
所以我很不确定它对我的期望是什么。我最初的猜测是它循环遍历并且基本上执行 a-1,a-2.....,a-8 使每个值等于字符 Z。所以该图基本上是 8 个对象都指向 Z 每个具有相同的地址为 Z。我不确定这是对还是错得离谱。谁能解释一下。仅供引用,这是一份过去的试卷,为期末练习,而不是考试作业!
最佳答案
你不能保证它是如何工作的,因为它取决于 C 编译器如何安排。但是,您可以轻松地确定特定 C 编译器是如何执行此操作的。假设是gcc
,用-g
编译,然后在gdb
下运行程序。使用 print
打印变量(或使用 print &x
打印变量地址),使用 x
检查内存。
关于c - 绘制执行代码图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27951447/