如本例所示:
#include <stdio.h>
void foo(int (*p)[5])
{
int *i = (int *)p;
printf("%d\n", *i);
}
有定义吗?在我看来,事实并非如此。
问题受到这个问题
的启发请记住,这个问题已标记为
language-lawyer
这不是严格的别名违规(C18 6.5.7),所以我很确定它是明确定义的:
对象的存储值只能由具有以下类型之一的左值表达式访问:
- 与对象的有效类型兼容的类型
- ⋮
- 在其成员中包含上述类型之一的聚合或联合类型(递归地包括子聚合或包含联合的成员)
(数组是聚合类型。)