C 指针大小是否相同?

C 指针大小是否相同?,c,pointers,C,Pointers,可能的重复项: sizeof(Bucket*)与sizeof(int*)相同,对吗 顺便说一句,是chararr[]在c90中有效?原始帖子: 是的,没错。指针是最重要的 同样大小 但是,这是错误的。我射得太快了!对此我很抱歉。一些指针大小不同的“情况”确实存在,取决于平台,也取决于类型:请看一看并获取示例或至少是一般性解释。(非常感谢@fmark和@paxdiablo,我也学到了一些东西)。但是,我从来没有遇到过指针大小不一样的情况(幸运/不幸?)我相信没有要求指针大小都一样的要求。唯一的

可能的重复项:

sizeof(Bucket*)
sizeof(int*)
相同,对吗

顺便说一句,是
chararr[]在c90中有效?

原始帖子:

是的,没错。指针是最重要的 同样大小


但是,这是错误的。我射得太快了!对此我很抱歉。一些指针大小不同的“情况”确实存在,取决于平台,也取决于类型:请看一看并获取示例或至少是一般性解释。(非常感谢@fmark和@paxdiablo,我也学到了一些东西)。但是,我从来没有遇到过指针大小不一样的情况(幸运/不幸?)

我相信没有要求指针大小都一样的要求。唯一的要求是,所有对象指针都可以存储在
void*
中,当转换到
void*
并返回时,它们将是相同的,并且所有函数指针,如果转换到另一种类型的函数指针并再次返回,将是相同的。(将函数指针强制转换为
void*
不保证有效。如果我没有说明,请原谅。)

在实践中,我认为只有当你关心C++的成员函数指针,或者你在一个更模糊的体系结构上工作时,你才会发现不同大小的指针


在C90中,
char-arr[]
是预声明待确定长度的全局数组的有效方法。请注意,
char arr[]
是一个不完整的类型,因此必须先声明它,然后才能使用
sizeof
。与C99中的方式不同,创建灵活的数组成员是无效的。

BTW,is char arr[];在c90中有效?这是正确的,但指针的大小取决于平台?您是否愿意引用您的来源来说明该声明(“指针大小相同”)?比如:ISO标准的哪一部分要求这样做?-1,不正确。看-我没有否决你,顺便说一句,我想给你一个机会来纠正它,特别是因为大多数架构都是恐龙(虽然DOS仍在使用)。重复,你应该把这个问题分成两个问题,这样他们就可以很好地分别回答-1的两倍,不正确。请看我认为-1,因为措辞不明确有点苛刻。在我回答的第二段之前,我真的把函数指针忘得一干二净,所以我不想在前面进行区分,特别是因为OP似乎对函数指针并不特别感兴趣在c89中有效?@arr-与在C90中一样有效。C89==C90。你能详细说明一下[]吗?你说的“在使用sizeof之前必须声明它”是什么意思?