0

申し訳ありませんが、これはどこかで答えられる必要がありますが、見つかりません。

私はコードをもっている:

const int * tableCards[9];
int hand1card1 = 0;
tableCards[0] = & hand1card1;
int hand1card2 = 1;
tableCards[1] = & hand1card2;
int * flop1 = & tableCard[0];
tableCards[2] = flop1;
cout << * flop1 << endl;
cout << * tableCards[2] << endl;
flop1++;
cout << * flop1 << endl;
cout << * tableCards[2] << endl;

tableCard[48] is an array of pointers to ints

このコードは機能しますが、 が指す要素の実際の値を返すtableCards[2] = flop1;ように行を変更したいと思います。このコードでは、*flop1 は必要な値を返しますが、*tableCards[2] は flop1 をインクリメントした後も同じままです。* tableCards[2]* flop1

tableCards[2] = & (* flop1);*flop1 が指す値のアドレスを int ポインター tableCards[2] に割り当てると思っていましたが、flop1 をインクリメントした後、tableCards[2] の値は同じままです。ポインターの配列の代わりにポインターのポインターの配列を使用したくありません。必要な 4/9 の値は、int のポインターではなく、int であるためです。

編集: tableCards[9] は tableCard[48] とは異なる配列であることに注意してください。そして、申し訳ありませんが、コメントと回答を見ると、この質問は混乱しているに違いありません。

4

1 に答える 1

1

これはコンパイルできません:

int * flop1 = & tableCard[0];

の型はtableCard[0]isint*なので、 it で参照すると&になりint**ます。あなたはそれをに割り当てていint*ます。少なくとも、コンパイラの警告を生成する必要があります。

したがって、はflop1アドレス を指し、 に格納されている値 (ポインタ)を提供し、を指す値を提供します。しかし、 (の代わりに)間違った型を指定したため、これを行うことはできません。tableCard[0]*flop1tableCard[0]**flop1tableCard[0]flop1int*int**

これは、別の配列があるというあなたのコメントに基づいています。

int * tableCard[48];

あなたの意図は次のとおりだと思います。

int * flop1 = tableCard[0];
tableCards[2] = flop1;

ここで、インクリメントflop1すると、ポインターが変更されるだけです。のポインターは、tableCards[2]指しているのと同じ値をtableCard[0]指し続けます。

しかし、これは非常にいたずらです:

flop1++;
cout << * flop1 << endl;

flop1に格納されているポインタtableCard[0]です。それをインクリメントしてから使用すると、それを配列として扱っています。たぶんそうですか?しかし、おそらくそうではありません。flop1メモリが現在何を指しているのかわかりません。

[編集]このコードが何を達成しようとしているのかについてさらに考えた後...

したがって、実際にflop1、2 番目の配列要素を指すことが期待される場合は、ダブルポインター ( int**) を使用する必要があります。これは、要素ではなく、配列flop1内のイテレータになったことを意味します...したがって、それをインクリメントすると、に格納されているポインタを指すようになりましたが、まだ値が含まれています (ただし、指していません) 。tableCardtableCard[1]tableCards[2]tableCard[0]

int ** flop1 = & tableCard[0];
tableCards[2] = *flop1;
cout << **flop1 << endl;
cout << *tableCards[2] << endl;
flop1++;
cout << **flop1 << endl;
cout << *tableCards[2] << endl;

もう一度推論に基づいてさらに編集します...tableCard配列を次のように定義したいのではないかと思います。

int tableCard[48];

その場合、他の変更を必要とせずに、コードは正しいはずです。まあ、おそらく。全体が少し疑わしいようです。

于 2012-09-10T22:36:05.720 に答える