-1

私は今、C のポインタとメモリのセクションを学んでいます。今、私はこのコードに行き詰まっています。このコードがどのように処理され、コードがどのように結果を表示するかを理解していませんcontestants[2] = 2。私は非常に新しい学習者であると考えて、1 つのコードがどのように機能し、その結果 2 がどうなったかについて簡単に答えてください。

#include <stdio.h>

int main()
{
    int contestants[] = {1, 2, 3};
    int *choice = contestants;

    contestants[0] = 2;
    contestants[1] = contestants[2];
    contestants[2] = *choice;
    printf("I'm going to pick contestant number %i\n", contestants[2]); return 0;
}
4

2 に答える 2

2
int contestants[] = {1, 2, 3};

contestantsは、 から始まり、0値およびでインデックス付けされた積分の配列です。contestants[0] == 1contestants[1] == 2`contestants[2] = 3

int *choice = contestants;

choicecontestants配列の最初の要素のアドレスである配列のアドレスに割り当てられた整数ポインタcontestantsです。したがって、*choiceと同じ結果が得られますcontestants[0]

contestants[0] = 2;

これは に割り当て2られcontestants[0]ます。今contestants[0] == 2、したがって、*choice == 2. 配列は次のcontestantsようになり{2, 2, 3}ます。

contestants[1] = contestants[2];

2に値を割り当てますcontestants[1]contestants配列は次のようになります{2, 3, 3}

contestants[2] = *choice;

to*choiceと同じものを代入します。したがって、配列は次のようになります。contestants[0]contestants[2]contestants{2, 3, 2}

printf("I'm going to pick contestant number %i\n", contestants[2]); return 0;

あなたが観察したようcontestants[2]に、印刷します。2

于 2013-11-09T19:08:28.120 に答える
0
  1. contestantsvalues を含む整数型の配列です{1, 2, 3}
  2. choiceintの有効なメモリ位置を指す型のポインタですcontestants
  3. 配列内の各要素はcontestantsとしてアクセスされますcontestants[i]。ここで、iは から始まる配列のインデックスです0。インデックスの場所にcontestants[0] = 2;値を割り当てるものです。 20
  4. contestants[2] = *choice;- 選択はポインターであり、ポインターが*choice指す値を取得する逆参照ポインターと呼ばれます。choice2

一般的なメモリ レイアウトは次のとおりです。

              contestants[] 
choice           0      1     2 
+-----+       +-------------------+
|0x100|------>|  1   |  2   |  3  |              
|     |       |      |      |     |
+-----+       +-------------------+
            0x100  0x104  0x108  
于 2013-11-09T19:04:50.023 に答える