整数类型的指针大小与int *的大小

时间:2015-05-25 10:39:50

标签: c pointers

我开始阅读指针,同时修补它们。我偶然发现了这个:

#include<stdio.h>
int main()
{
    int *p,a;
    a=sizeof(*p);
    printf("%d",a);
}

输出:4

然后在sizeof(*p)的位置我用sizeof(int*)替换它现在输出8。

P是整数类型的指针,int *也是同一个东西(我的假设是正确的吗?)。那么为什么它会打印两个不同的值。我在64位gcc编译器上这样做。

2 个答案:

答案 0 :(得分:12)

每个初学者总是会对指针声明与取消引用指针混淆,因为语法看起来是一样的。

  • int *p;表示“声明指向int的指针”。您也可以将其写为int* p;(相同的含义,个人偏好)。
  • *p,当在声明中的任何其他地方使用时,意味着“取p点的内容”。

因此sizeof(*p)表示“给我p指向的内容的大小”,但sizeof(int*)表示“给我指针类型本身的大小”。在你的机器上,int显然是4个字节,但指针是8个字节(典型的64位机器)。

答案 1 :(得分:7)

*pint*不是一回事!第一个是解除引用的指针(即int,宽度为4个字节),第二个是指针(在你的情况下是8字节宽,因为它是64位机器)。