受到我对最近帖子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 *
后,将取消引用。
这是否违反严格的别名规则?