2010-10-24 81 views
1

我们能不能改变2字节指针的大小,使它占用2个字节以上?有什么办法指针的大小可以从2个字节改变?

+4

为什么你会想改变一个指针的大小? – casablanca 2010-10-24 19:37:36

+0

我不知道他们为什么在考试中提出这样的问题。 – 2010-10-24 19:40:48

+0

哦,我没有意识到这是一个考试问题。那么,Peter Torok的回答就是你现在要找的。 – casablanca 2010-10-24 19:45:22

回答

10

当然,编译为32(或64)位平台:-)

指针的大小是特定的平台,这将是仅在16位平台2个字节(还没有被广泛地用于十数年 - 时下所有主流[更新](台式/膝上型计算机/服务器)[/更新]平台是至少32位)。

+0

我想知道我是否应该在这方面使用远指针 – 2010-10-24 19:41:28

+10

@fahad:你最好能够下车MS DOS和Turbo C. – 2010-10-24 19:47:05

+0

好而简单:-0 – SmallChess 2010-10-25 03:48:05

2

如果您的指针大小为2个字节,这意味着您正在运行在16位系统上。

增加指针大小的唯一方法是使用一个32位或64位系统,而不是(这将意味着建在过去的15年左右的任何台式机或笔记本电脑)。

如果你正在使用16位的一些嵌入式设备上运行,你唯一的选择是切换到使用32位(或只是生活在你的指针是16位),其他设备。

1

当处理器被说成是“X位”(其中X为16,32,64,等等),即X指的是存储器地址寄存器的大小。因此,一个16位系统有一个2字节的存储器地址寄存器。

您不能将4个字节的地址转换为更小的任何地址,因为它会丢失指向它的部分地址。 (一个2字节的内存地址寄存器只能指向2^16 = 64KB的内存,而一个4字节的寄存器可以指向2^32 = 4GB的内存。)

您可以随时“升压” (即,在64位计算机上运行32位软件应用程序),因为指针范围没有丢失。但是你永远不能退下来,这就是为什么64位程序不能在32位系统上运行。

+0

那么16位8086如何才能达到1Mb而不只是64k呢?如果只有'比特'是容易的。营销部门需要回答很多问题。 – Skizz 2010-10-25 08:45:49

0

一个指针作为一个数字,而不是只用于计算一个实际值的思考,这是在系统的存储器映射“插槽”的数量。

指针必须能够表示内存映射的最高位置。也就是说,它必须至少具有表示最高位置数量所需的字节数量。

在一个16位的系统中,可能的最高位置为0xFFFF(具有设置为1的所有位的16位号码)。一个指针也必须有16位,所以它可以达到这个数字。

推广,在一个X位系统中,指针将有X位。

可以存储一个指针在一个较大的变量,你可以在1号存储在char以同样的方式,在int,或unsigned long long如果你想;但没有什么意义的:认为这一点,同样的方式一个较短的指针将无法达到最高的内存位置,一个更长的指针可以指向内存中实际不存在的内容,那么为什么要它?

此外,你必须“欺骗”编译器。如果在代码中使用指针表示法,编译器将始终使用正确数量的字节。不过,您可以指示编译器为另一个平台编译。

相关问题