【发布时间】:2020-04-11 12:15:10
【问题描述】:
受我对最近帖子的评论的启发:C get element on place without parenthesis,我想知道以下代码是否违反了严格的别名规则:
#include <stdio.h>
int main(void)
{
int num[3] = { 1, 2, 3 };
printf("num[1] = %d\n", *(int *)((char *)num + sizeof(int)));
return 0;
}
我知道将类型转换为 char 以外的其他类型的指针取消引用是违规的,但在这里,原始指针的类型为 int *。在将其转换为 char * 然后再转换为 int * 后,它会被取消引用。
这是否违反了严格的别名规则?
【问题讨论】:
标签: c language-lawyer pointer-arithmetic strict-aliasing