为什么指针声明中需要数据类型?

新手上路,请多包涵

据我所知,C/C++ 中的数据类型,在声明变量时,我们需要声明它的数据类型,这告诉编译器相应地保留内存中的字节数。

但是在指针的情况下,我们知道它们的大小是恒定的(例如“Turbo Compiler”中的 2 个字节),而与 它指向的变量 的数据类型无关,因为指针将内存地址存储为无符号整数。

我的问题是,如果指针 总是 以字节为单位的常量大小,那么在声明它们时需要提及 数据类型 吗?我对指针的理解是错误的吗?

原文由 Chandra Sekhar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 410
2 个回答

取消引用指针 时需要数据类型,因此它知道应该读取多少数据。例如,取消引用 char 指针应该从它指向的地址读取下一个字节,而 int 指针应该读取 2 个字节。

原文由 glindste 发布,翻译遵循 CC BY-SA 4.0 许可协议

首先,指针本身的大小和表示 对于不同的类型并不总是相同的。这只是在许多实现中发生的事情。

其次,当使用指针时,您并不关心指针本身的大小。您需要 尖类型的大小

例如,试试这个:

 int var[5];
char *c = (char *)var;
int  *x = var;

printf("%p\n%p\n", p + 1, x + 1);

您会看到指针算法很大程度上取决于指向类型的大小。

原文由 cnicutar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题