是否已定义将“指向类型数组的指针”转换为“指向类型的指针”?

问题描述 投票:0回答:1

如本例所示:

#include <stdio.h>

void foo(int (*p)[5])
{
    int *i = (int *)p;
    printf("%d\n", *i);
}

有定义吗?在我看来,事实并非如此。

问题受到这个问题

的启发

请记住,这个问题已标记为

language-lawyer

c pointers language-lawyer
1个回答
0
投票

这不是严格的别名违规(C18 6.5.7),所以我很确定它是明确定义的:

对象的存储值只能由具有以下类型之一的左值表达式访问:

  • 与对象的有效类型兼容的类型
  • 在其成员中包含上述类型之一的聚合或联合类型(递归地包括子聚合或包含联合的成员)

(数组是聚合类型。)

© www.soinside.com 2019 - 2024. All rights reserved.