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

时间:2012-04-12 18:20:33

标签: c arrays string memory 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;

输出结果为:

asdf 123 456

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

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

1 个答案:

答案 0 :(得分:7)

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

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