假设我有一个字符缓冲区,我想避免使用memcpy,并通过int *变量访问它:
char buffer[100];
strcpy(buffer,"Hello");
int* __restrict ptr=(int*)buffer;
*ptr= 97;
printf("%s",buffer);
现在这当然打印“a” 我是否可以在不遇到未定义的行为的情况下这样做?
答案 0 :(得分:1)
现在这当然打印“a”。
嗯,只有小端机器。
严格别名与您的示例无关,因为其中一个类型为char
,如果char
的目标不是增加,则restrict
可能会对其进行别名编译器可能认为没有别名的情况,即使输入信息也不会阻止它。
显然,如果您需要有关实施域中__restrict
的信息,则应指定实施。