C语言中指针指向?

来源:百度知道 编辑:UC知道 时间:2024/05/24 12:01:44
C语言中指针指向的地址为什么是6位16进制才24位地址,我们用的是32位系统应该是32位才对,他为什么是24位?

如果你的操作系统是windows,再继续看下去

你的c程序很可能使用了虚拟8086模式
请参考我的另一篇回答:
http://zhidao.baidu.com/question/111476167.html
补充:16位dos及windows下的虚拟8086模式使用的是20位地址,并不是24位

-------------------------------------------
To weifan2008:
确实,如果楼主用的c编译器是32位的。6位16进制才24位地址的指针很有可能指向了0x00120000-0x00110000之间的值,vc++就在这片区域分配栈空间,所以指针值看似像是24位的

另外楼主,你可以告诉我你用的什么c产品吗?

是这样的因为这个地址的值没有达到32位这么大
用一个程序来说明一下:
#include<stdio.h>
int main()
{
char *p;
p = "123";
printf("%x",p);//这是输出是指针p的值,有可能显示不是8位16进制
因为p所指向的地址可能很小,比如是0x00000012;打印出来时前面的0都 省 略了。结果就是12.只有两位。
p = p+0x12345678; //这句是故意让p指向的地址偏移一个大值
printf("%x",p);//在打印肯定就是是8位16进制了
return 0;
}

跟你内存有关。地址是24位说明你的内存容量是2的24次方存储单元,而你说的32机系统是指机器字长,也就是CPU一次能处理的数据位数!由这两个数据可以得出你的内存容量:2的24次方乘以2的32次方各除以8(字