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

Sur*_*ala 2 c pointers

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

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

它输出:4

然后在sizeof(*p)我用它取代它的地方sizeof(int*) 输出8.

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

Lun*_*din 13

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

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

因此sizeof(*p)意味着"给我p指向的内容的大小",但sizeof(int*)意思是"给我指针类型本身的大小".在你的机器上,int显然是4个字节,但指针是8个字节(典型的64位机器).


ban*_*ace 7

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

  • 在它的'p`中没有'P`.`sizeof(p)`将是'8`但是`sizeof(*p)`是因为它与`sizeof(int)`而不是`sizeof(int*)`相同. (2认同)