在VC6.0调试C语言中发现的问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 15:32:34
在32位机中,一个int类型占4个字节大家都知道,为什么调试的时候地址只增加了2。
如:定义一个int a[2] a[0]的地址为:0x0012ff38 a[1]的地址为:0x0012ff40
哪位高手能详细解答一下?
确实0x0012ff40 - 0x0012ff38 = 8 ,但是增加8也不对吧,不应该是4吗?还是和CUP有关,我的是AMD 64 x2

我用如下代码调试了一下,验证了一个int类型的变量占4个字节,没有任何问题:
#include "stdio.h"
int main(int argc, char *argv[])
{
int a[2];
for(int i=0; i<2; i++)
{
a[i] = i;
printf("%d\n",a[i]);

}
return 0;

}

在调试的时候,我观察了两个变量(a[0]和a[1])的地址,显示如下:
&a[0] 0x0012ff78
&a[1] 0x0012ff7c

用0x0012ff7c - 0x0012ff78 = 4(字节)
没有任何问题。
要不你再试试。注意在调试的时候在watch1窗口中注明你要观察的变量,
如&a[0] , &a[1]

0x0012ff40 - 0x0012ff38 = 8吧
我怀疑你测试的结果不对,你贴出来怎么的这两个地址的值。
下面这种测试应该是对的,你试试看
printf("a[0]: %x\n", (char*)&a[0] - (char*)0);
printf("a[1]: %x\n", (char*)&a[1] - (char*)0);

我试了是4个字节啊。

不会是写成short int 了吧