1

私はそのようなコードを持っています:

int *x[2];
int var0 = 10;
int var1 = 20;
int var2 = 30;
x[0] = &var0;
x[1] = &var1;
x[2] = &var2;

cout << "var0 is equal to: " << *x[0] << endl;

var0 is equal to: 32767

私が期待していること:

  • 3つのアイテムでポインターの配列を初期化しました
  • いくつかの値を 3 つの変数に割り当てました
  • この変数のアドレスをポインタの配列の項目に割り当てます
  • 今私は期待しています: *x[0] = 10, *x[1] = 20, *x[2] = 30、しかし、例からわかるように*x[0] == 32767。なんで?
4

2 に答える 2

5
int *x[2];

2 つのポインターの配列を宣言します。この配列の有効なインデックスは [0..1] です。この線

x[2] = &var2;

配列の終わりを超えて書き込みます。&var0 == x[2]これには未定義の結果がありますが、 を上書きしてのアドレスvar0に設定しているように聞こえます。var2

3 つのポインター値を割り当てたい場合は、3 つの要素を持つ配列が必要です -int *x[3];

于 2013-05-31T21:15:47.607 に答える
2

2 つの要素を持つ配列を作成しましたが、3 つの要素に書き込んでいます - これは問題の解決にはなりません

于 2013-05-31T21:15:38.177 に答える