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 (ここでは asdf[i]) で i の代わりに int 変数を使用すると、プログラムが失敗します。例: if("123"[j]==1)

誰かが私にそれを説明できますか?

4

1 に答える 1

7

多くの場合、定数文字列はプログラム コードとは別に格納されますが、それらがメモリ内で互いに近くに配置されていることは驚くべきことではありません。ただし、これに依存するべきではありません。

プログラムには未定義の動作があり、別のコンパイラを使用してコードを実行しようとすると、別のことが起こる可能性があります。たとえば、 gcc 4.3.4 を使用してideoneでコードを実行すると、得られるものと同じ出力が得られません。

于 2012-04-12T18:23:00.877 に答える