【发布时间】:2014-06-22 14:37:28
【问题描述】:
以下内容在 C89 中的合法性似乎存在问题。我不明白为什么它是允许的。我正在阅读标准和我的 K&R2 副本,但我仍然不明白。
char Arr[16];
char (*Durr)[] = &Arr; /*Why is this allowed?*/
真的是这样。我需要 C89 标准的引用,告诉我为什么允许这样做。这不是 C++ 问题,那里绝对是非法的。谢谢!
编辑:这解释了标准中的问题:http://port70.net/~nsz/c/c89/c89-draft.html#3.3.16.1
【问题讨论】:
-
您在哪里看到不完整的类型?我错过了什么吗?
-
是的。该指针是一个指向未知大小数组的指针,这使它成为一个不完整类型的指针。
-
首先,
Arr确实有一个已知大小:16 * sizeof(char)。其次,据我了解,获取地址并分配指针不是问题。只有取消引用指向不完整类型的指针才是问题。不过,我对这里的一些 C 规范专家不得不说的话很感兴趣。 -
在我看来,这与
int a; int *p = &a;没有什么不同。
标签: c arrays ansi language-lawyer incomplete-type