为什么指针在C中大小相同

为什么指针在C中大小相同,c,linux,64-bit,C,Linux,64 Bit,为什么C中的所有指针都有相同的大小?我在64位arch上 #include<stdio.h> int main(){ printf("int\t%ld\n",sizeof(int*)); printf("char\t%ld\n",sizeof(char*)); printf("void\t%ld\n",sizeof(void*)); printf("float\t%ld\n",sizeof(float*)); } OP : int 8 char 8 void

为什么C中的所有指针都有相同的大小?我在64位arch上

#include<stdio.h>

int main(){
printf("int\t%ld\n",sizeof(int*));
printf("char\t%ld\n",sizeof(char*));
printf("void\t%ld\n",sizeof(void*));
printf("float\t%ld\n",sizeof(float*));
}

OP :
int     8
char    8
void    8
float   8
#包括
int main(){
printf(“int\t%ld\n”,sizeof(int*);
printf(“char\t%ld\n”,sizeof(char*);
printf(“void\t%ld\n”,大小为(void*);
printf(“float\t%ld\n”,sizeof(float*);
}
作品:
int 8
字符8
无效8
浮动8

因为您只需要64位来索引内存地址,而您列出的所有数据类型只需要索引内存地址(给定数据在内存中“开始”的位置)。请注意,这对于C是正确的,但是在C++中,成员函数指针可能不止于此。

为什么它们的大小不一样?它们不能保证大小相同,但通常总是:假设它们中的一个有更小的大小,这将对允许这种类型的东西在内存中的位置设置一个很大的限制。@harold:这在某些体系结构中是典型的。C不仅仅是x86/ARM。@Olaf这是一个结果,我并没有说这使它不可能。但这确实不方便。是的,它们都指向一个内存地址。它们仍然是不同数据类型(如int char等)的原因是C编译器需要执行指针算法。例如,添加一个“char”指针将增加一个表示下一个字节的字节,增加四个表示“int”。@Nishant:这是原因的结果,但不是原因。如果这是原因,对于任何
T
U
其中
sizeof(T)==sizeof(U)
,我们可以说
T*
U*
相同,这显然不是不同结构的情况。原因是类型安全,并且解引用操作符需要有一个明确的、特定的返回类型。结果是编译器现在可以执行有意义的指针算术。