- ベストアンサー
C言語の配列について質問です。
配列の添え字に別の配列を指定するような以下の処理について 質問です。 #include <stdio.h> int main(void) { int k = 0; int kn = 0; char str[256]; char key[] = "ABCD"; kn = strlen(key); for(k=0; k<kn-1; k++) { str[key[k]] = kn-k-1; } } 上記についてですが、for文の中で "str[key[k]]"とありますが、 ループ処理にともなって配列str[] の添え字は、str[A], str[B], str[C] となるのでしょうか?? その場合、結果的に配列str[]の各要素にはどのような値が格納され るのでしょうか? そもそも、配列の添え字に対して別の配列を指定した場合の動きが よくわかりません。 どなたか教えて頂けますか??
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
str[key[k]]部分は ループの中で key[k]が評価された値を使って 配列strをアクセスします k=0の場合 key[k]は『A』ですから key[k]は65(0x41)として評価されます したがって str[65]に対しての代入になります k=1の場合は同様に評価して str[66]にアクセスすることになります str[65] = 4 - 0 - 1 = 3 str[66] = 4 - 1 - 1 = 2 str[67] = 4 - 2 - 1 = 1 str[68] = 4 - 3 - 1 = 0 といったことになりそうです ここで配列strの中身を初期化していないのでstr[65]かstr[68]以外はどのような値が格納されているのかは不明です 変数は初期化してから使うように心がけましょう for ( n = 0; n < 256; n++ ) { str[n] = 0; } または char str[256] = {0}; といった具合に初期化してから使いましょう
その他の回答 (1)
- yama5140
- ベストアンサー率54% (136/250)
>その場合、結果的に配列 str[] の各要素にはどのような値が格納されるのでしょうか? ☆出力してみればよいのでは・・(確認してから//◆をはずす)。 for( k = 0; k < ( kn - 1 ); k++ ){ /*DEBUG*/ printf( "k=%d,key[k]=%d,(kn-k-1)=%d\n", k, key[ k ], ( kn - k - 1 ) ); //◆ str[ key[ k ] ] = kn - k - 1; } >そもそも、配列の添え字に対して別の配列を指定した場合の動きがよくわかりません。 ☆(頭の中で)「別の配列」を「変数」に置き換えてみれば・・。 i = key[ k ]; str[ i ] = kn - k - 1;
お礼
細かく回答して頂きありがとうございます。 非常に勉強になりました。
お礼
細かく回答して頂きありがとうございます。 非常に勉強になりました。