考虑pch,pshort,pdouble分别声明为char,short int,double的指针,如果根据它们的大小排列三个变量,那将是什么排列?
答案 0 :(得分:3)
这个滑稽的答案是你不知道的。 char
,short
和double
的大小可能相同,char*
,short*
和double*
的大小可能不同!
sizeof(char)
是标准的1。你不能拥有更小的东西,所以把char
放在第一位是有意义的。
但short int
可能与long int
的大小相同:标准仅指定最小范围。两者都可能大于double
。
通常 a double
的权重为64位,short
为16或32位。
简约答案为char
,short
,double
。
对于指针,标准允许sizeof(char*)
,sizeof(short*)
和sizeof(double*)
都不同。
答案 1 :(得分:3)
指向不同类型的指针可能具有不同的大小,但在大多数现代平台上,它们都是相同的大小(x86为32位,x86_64为64位)。
要求 1 是:
char
的指针和指向void
的指针具有相同的大小和表示形式; struct
类型的指针都具有相同的大小和表示形式; union
类型的指针都具有相同的大小和表示形式; sizeof (int*) == sizeof (const int *)
)<小时/>
答案 2 :(得分:1)
在可以做64位关节的机器上,指针变量通常是64位,因为它允许机器处理超过2 ^ 32(40亿或4千兆字节)的RAM。在无法处理64位算术的机器中,必须使用长指针,这些指针较慢且实际上是两个放在一起的指针,它们将每个最大量的RAM视为数组中的索引。因此,长指针比常规指针慢。
EDIT Bethsheba提醒我,在下面的注释中,指针在寄存器中通常不是64位,但出于性能原因通常会在内存中填充为64位(因此,将其视为64位)。