我开始阅读指针,同时修补它们。我偶然发现了这个:
#include<stdio.h>
int main()
{
int *p,a;
a=sizeof(*p);
printf("%d",a);
}
输出:4
然后在sizeof(*p)
的位置我用sizeof(int*)
替换它现在输出8。
P是整数类型的指针,int *也是同一个东西(我的假设是正确的吗?)。那么为什么它会打印两个不同的值。我在64位gcc编译器上这样做。
答案 0 :(得分:12)
每个初学者总是会对指针声明与取消引用指针混淆,因为语法看起来是一样的。
int *p;
表示“声明指向int的指针”。您也可以将其写为int* p;
(相同的含义,个人偏好)。*p
,当在声明中的任何其他地方使用时,意味着“取p点的内容”。因此sizeof(*p)
表示“给我p指向的内容的大小”,但sizeof(int*)
表示“给我指针类型本身的大小”。在你的机器上,int
显然是4个字节,但指针是8个字节(典型的64位机器)。
答案 1 :(得分:7)
*p
和int*
不是一回事!第一个是解除引用的指针(即int
,宽度为4个字节),第二个是指针(在你的情况下是8字节宽,因为它是64位机器)。