正在访问整数,因为字符数组在不同的机器和环境上不同

Is accessing a integer as a character array differs on different machine and environment

这是我的代码

int c = 10;
char *ch = &c;
ch[0] = 'a';
ch[1] = 'b';
ch[2] = 'c';
ch[4] = '[=10=]';
printf("%s\n",ch);
printf("%x\n",c);
printf("%d\n",c);

输出是 abc 6362616513249 在我看来是正确的,但它是标准结果还是在不同的机器上有所不同,例如第二个 [= 的输出14=]就像616263?或者在某些机器上这样做是非法的? 编辑:我在 Ideone.Com 中尝试过,结果也一样。

but is it a standard result or it varies on different machine for example the output of the second printf is like616263

执行字符集不需要是ASCII,例如在带有EBCDIC的系统上你会得到不同的结果。

(C99, 5.2.1p1) "The values of the members of the execution character set are implementation-defined."

此外,int 的大小不需要是 32 位,例如在具有 16 位 int 的系统上,您的程序是未定义的行为。如评论中所述,如果您的系统是大端系统(616263 而不是小端系统中的 636261),您将得到不同的结果。