指针变量的大小

时间:2017-11-10 11:43:15

标签: c pointers variables size

考虑pch,pshort,pdouble分别声明为char,short int,double的指针,如果根据它们的大小排列三个变量,那将是什么排列?

3 个答案:

答案 0 :(得分:3)

这个滑稽的答案是你不知道的。 charshortdouble的大小可能相同,char*short*double*的大小可能不同!

sizeof(char)是标准的1。你不能拥有更小的东西,所以把char放在第一位是有意义的。

short int可能与long int的大小相同:标准仅指定最小范围。两者都可能大于double

通常 a double的权重为64位,short为16或32位。

简约答案为charshortdouble

对于指针,标准允许sizeof(char*)sizeof(short*)sizeof(double*)都不同。

答案 1 :(得分:3)

指向不同类型的指针可能具有不同的大小,但在大多数现代平台上,它们都是相同的大小(x86为32位,x86_64为64位)。

要求 1 是:

  • 指向char的指针和指向void的指针具有相同的大小和表示形式;
  • 指向struct类型的指针都具有相同的大小和表示形式;
  • 指向union类型的指针都具有相同的大小和表示形式;
  • 指向兼容类型的合格和非限定版本的指针具有相同的大小和表示(即sizeof (int*) == sizeof (const int *)
  • 指向所有其他类型的指针可能有不同的大小。

<小时/>

  1. C 2011年在线草案,第6.2.5节,第28段。

答案 2 :(得分:1)

在可以做64位关节的机器上,指针变量通常是64位,因为它允许机器处理超过2 ^ 32(40亿或4千兆字节)的RAM。在无法处理64位算术的机器中,必须使用长指针,这些指针较慢且实际上是两个放在一起的指针,它们将每个最大量的RAM视为数组中的索引。因此,长指针比常规指针慢。

EDIT Bethsheba提醒我,在下面的注释中,指针在寄存器中通常不是64位,但出于性能原因通常会在内存中填充为64位(因此,将其视为64位)。