【问题标题】:Why are pointers are of same size in C [duplicate]为什么C中的指针大小相同[重复]
【发布时间】:2016-11-20 05:26:06
【问题描述】:

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

#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

【问题讨论】:

  • 为什么它们的尺寸不一样?
  • 它们不保证大小相同,但通常总是:stackoverflow.com/questions/1241205/…
  • 假设其中一个具有较小的尺寸,这将对允许该类型的东西在内存中存在的位置设置很大的限制。
  • @harold:这在某些架构上很典型。 C 比 x86/ARM 还多。
  • @Olaf 这是一个结果,我没有说这不可能。不过这确实很不方便。

标签: c linux 64-bit


【解决方案1】:

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

【讨论】:

  • 是的,它们都指向一个内存地址。它们仍然具有不同数据类型(如 int char 等)的原因是 C 编译器执行指针算术。例如,添加一个 'char' 指针会增加 1 表示下一个字节,而 'int' 会增加 4。
  • @Nishant:这是原因的结果,但不是原因。如果这是原因,对于任何sizeof(T) == sizeof(U)TU,我们可以说T*U* 相同——例如,显然不是这种情况。不同的结构。原因是类型安全以及取消引用运算符需要有明确的、特定的返回类型。结果是编译器现在可以进行有意义的指针运算。
猜你喜欢
  • 1970-01-01
  • 2017-06-01
  • 2019-05-15
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多