小东西 你那里好湿:请问 在C中 (TC3.0)一个指针变量 在内存中占几个字节?

来源:百度文库 编辑:高考问答 时间:2024/05/06 00:05:59
那 如果 指针变量只占 2字节(tc3.0)
那它能指向的内存范围是0-65535以内的地址 那其他的地址岂不是无法指到?

不同的计算机是不一样的.
32位的是4个字节,也就是现在用的最多的(64位快了...),16位就是2个字节.
虽然是16位,不过他的寻址方式不只是用指针,系统还要配合段继存器(16位系统当然也是16的的继存器了)来寻址,合起来也就是4个字节了.

现在的32位跟16的差不多,不过由于WINDOWS系统所有的数据段都使用一个地址(人家可能认为32位够用了吧),就不会涉及到段继存器了.

当然象”zz003pm”说的地址转换的问题我还不太清楚,可能是由硬件实现的,不记得了.

// zd_20.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int main(int argc, char* argv[])
{
int *p;
char *c;
long int *q;
float *f;
printf("%d\n",sizeof(p));
printf("%d\n",sizeof(c));
printf("%d\n",sizeof(q));
printf("%d\n",sizeof(f));
printf("Hello World!\n");
return 0;
}
VC下输出为
4
4
4
4
TC下输出为
2
2
2
2

原因:
一般来说
指针长度应该与OS的位数有关
32位操作系统应该为4个字节
以后64位操作系统应该为8个字节
但在编译环境中
指针长度是由编译环境来设置的
由于TC是DOS时代的产物
所以它还是2个字节
VC自然是4个字节

呵呵,指针指向的是逻辑地址。当构成实际地址的时候指针还要跟一定的段地址寄存器进行运算才能得出真实地地址。这些都是操作系统做的,你不需要关心这个。

貌似是4个字节吧