可能重复:
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中有效吗?
答案 0 :(得分:4)
我相信没有要求指针大小相同。唯一的要求是所有对象指针都可以存储在void *
中,当转换为void *
并返回时它们将是相同的,并且所有函数指针,如果转换为另一种类型的函数指针又回来了,会是一样的。 (无法保证void *
的转换函数指针有效。如果我另有说明,请抱歉。)
在实践中,我认为你唯一能找到不同大小的指针就是你关心C ++的成员函数指针,或者你处理的是一个更加模糊的架构。
在C90中,char arr[];
是预先声明一个待确定长度的全局数组的有效方法。请注意,char arr[]
是不完整的类型,因此您必须在使用sizeof
之前声明它。制作灵活的阵列成员在C99中无效。
答案 1 :(得分:2)
原帖:
是的,没错。指针是 相同的大小。
但是,那是错的。我射得太快了!对不起,我很抱歉。一些不同指针大小的“案例”确实存在,依赖于平台且依赖于类型:请查看http://c-faq.com/ptrs/generic.html和http://c-faq.com/null/machexamp.html以获取示例或至少一般性解释。 (非常感谢@fmark和@paxdiablo,我也学到了一些东西)。但是,我从来没有遇到指针尺寸不同的情况(幸运的是/不幸的是?)。