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时程序失败,而char-access-expression不是第一个(这里是asdf [i])。例如如果( “123”[J] == 1)
有人可以向我解释一下吗?
答案 0 :(得分:7)
常量字符串通常与程序代码分开存储,并且它们在内存中紧密排列并不奇怪。但是你不应该依赖它。
您的程序有未定义的行为,如果您尝试使用其他编译器运行代码,可能会发生不同的情况。例如,当我使用gcc 4.3.4在ideone上运行代码时,它输出的内容与您获得的内容不同。