从未在变量中声明的"字符串"访问字符(C)

use*_*846 1 c memory arrays string char

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;
Run Code Online (Sandbox Code Playgroud)

输出是:

asdf 123 456
Run Code Online (Sandbox Code Playgroud)

看似大多数'字符串'在内存中直接相继.我不认为这是随机的,或者是它?而且,当我在char-access-expression中使用int变量而不是i时程序失败,而char-access-expression不是第一个(这里是asdf [i]).例如if("123"[j] == 1)

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

Mar*_*ers 7

常量字符串通常与程序代码分开存储,并且将它们紧密排列在内存中也就不足为奇了.但是你不应该依赖于此.

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