0

假设我有一个字符缓冲区,我想避免使用 memcpy,并通过 int* 变量访问它:

char buffer[100];
strcpy(buffer,"Hello");
int* __restrict ptr=(int*)buffer;
*ptr= 97;
printf("%s",buffer);

现在这当然会打印“a”。
我可以在不遇到未定义行为的情况下执行此操作吗?

4

1 回答 1

1

现在这当然会打印“a”。

好吧,只在小端机器上。

并且严格的别名与您的示例无关,因为其中一种类型是char并且char如果目标restrict不是增加编译器可能假设没有别名的情况的数量,则可能会为任何东西加上别名,即即使键入信息也不会不要阻止它。

显然,如果您想了解__restrict哪些在实现域中,您应该指定实现。

于 2012-11-16T20:42:46.220 回答