麻烦各位解释一下为什么这个程序不是我所理解的输出?
#include <stdio.h>void main(void)
{
char test1 = 0;
char test2 = 1;
char test3 = 2;
char test4 = 3;
int f = *((int *)&test4);
printf("%x", f);
}各位大牛们,请问一下以上四个变量同在堆栈中,而且是紧靠在一起的,为什么下面的类型转换之后f输出的值不是我理解的0x0123呢?原谅我用VC整的这段程序:oops:
回复 1# bombzhao_cu
请问一下以上四个变量同在堆栈中,而且是紧靠在一起的,
谁告诉你是紧靠在一起的?
可以用VS的内存查看功能看看内存的位置,以及f在内存在位置,以及内存内的内容。
本帖最后由 bombzhao_cu 于 2016-09-13 22:54 编辑
回复 2# MMMIX
看了一下反汇编的,里面的前三个变量是靠在一起的。不知为何第四个变量就跳开了。00401028 mov byte ptr ,0
0040102C mov byte ptr ,1
00401030 mov byte ptr ,2
00401034 mov byte ptr ,3
00401038 mov eax,dword ptr
0040103B mov dword ptr ,eax
0040103E mov eax,dword ptr 估计是编译器知道后面要做转换给空开了,编译原理我不懂:dizzy:如何修改代码才能让四个变量靠在一起? 本帖最后由 MMMIX 于 2016-09-14 16:55 编辑
回复 4# bombzhao_cu
编译原理我不懂 如何修改代码才能让四个变量靠在一起?
懂点编译原理吧,然后你就不会问这个问题了(不想这么干了)。
当然,最简单的办法就是定义个数组,而不是弄四个不相关的变量。
MMMIX 发表于 2016-09-14 16:53
回复 4# bombzhao_cu
谢谢,我似乎明白了
页:
[1]