例如: Sizeof (char*)返回4。还有int* long long*,我试过的所有方法。有什么例外吗?
当前回答
在windows 32位机器上的Turbo C编译器中,指针和int的大小为2字节。
所以指针的大小是编译器特定的。但一般大多数编译器实现为支持32位4字节指针变量和64位8字节指针变量)。
所以指针的大小在所有机器上都是不一样的。
其他回答
不,指针的大小可能因架构而异。有很多例外。
据我所知,这是基于内存地址的大小。所以在一个32位地址方案的系统上,sizeof将返回4,因为那是4个字节。
除了人们所说的64位(或其他)系统,还有其他类型的指针,而不是指向对象的指针。
指向成员的指针几乎可以是任何大小,这取决于编译器如何实现它们:它们甚至不一定都是相同的大小。尝试一个POD类的指向成员的指针,然后尝试一个继承自具有多个基类的基类之一的指向成员的指针。什么乐趣。
一般来说,当你在不同的平台上编译时,sizeof(几乎任何东西)都会改变。在32位平台上,指针的大小总是相同的。在其他平台上(64位是最明显的例子),这种情况可能会发生变化。
8位和16位指针用于大多数低规格微控制器。这意味着每一台洗衣机、微型电脑、冰箱、老式电视甚至汽车。
你可以说这些与现实世界的编程毫无关系。 但这里有一个真实的例子: Arduino带有1-2-4k ram(取决于芯片),带有2字节指针。
它是最新的,便宜的,每个人都可以使用,值得为之编程。