1
char i;
for(i=0;i<16;i++)
    printf("%c","asdf"[i]);
i=1;
if("123"[i]==1)
    i=1;
if("456"[4]==1)
    i=1;
if("789"[1]==1)
    i=1;

输出是:

asdf 123 456

似乎大多数“字符串”在内存中直接紧随其后。我不认为这是随机的,或者是吗?此外,当我在 char-access-expression 中使用 int 变量而不是 i 时程序失败,这不是第一个(这里是 asdf[i])。例如 if("123"[j]==1)

有人可以向我解释一下吗?

4

1 回答 1

7

常量字符串通常与程序代码分开存储,它们在内存中紧密排列并不奇怪。但是,您不应该依赖于此。

您的程序具有未定义的行为,如果您尝试使用不同的编译器运行代码,可能会发生不同的事情。例如,当我使用 gcc 4.3.4 在ideone上运行您的代码时,它的输出与您得到的不同。

于 2012-04-12T18:23:00.877 回答