指针大小相同吗?

时间:2010-11-16 09:16:45

标签: c pointers

  

可能重复:
  Are there are any platforms where pointers to different types have different sizes?
  are all data pointers of the same size in one platform?

sizeof(Bucket *)sizeof(int *)相同,对吧?

BTW,char arr[];在c90中有效吗?

2 个答案:

答案 0 :(得分:4)

我相信没有要求指针大小相同。唯一的要求是所有对象指针都可以存储在void *中,当转换为void *并返回时它们将是相同的,并且所有函数指针,如果转换为另一种类型的函数指针又回来了,会是一样的。 (无法保证void *的转换函数指针有效。如果我另有说明,请抱歉。)

在实践中,我认为你唯一能找到不同大小的指针就是你关心C ++的成员函数指针,或者你处理的是一个更加模糊的架构。

在C90中,char arr[];是预先声明一个待确定长度的全局数组的有效方法。请注意,char arr[]是不完整的类型,因此您必须在使用sizeof之前声明它。制作灵活的阵列成员在C99中无效。

答案 1 :(得分:2)

原帖:

  

是的,没错。指针是   相同的大小。

但是,那是错的。我射得太快了!对不起,我很抱歉。一些不同指针大小的“案例”确实存在,依赖于平台且依赖于类型:请查看http://c-faq.com/ptrs/generic.htmlhttp://c-faq.com/null/machexamp.html以获取示例或至少一般性解释。 (非常感谢@fmark和@paxdiablo,我也学到了一些东西)。但是,我从来没有遇到指针尺寸不同的情况(幸运的是/不幸的是?)。

相关问题