2

こんにちは、次のコードを試しました:

int *a=&matrice[4][0];
cout<<*a<<"\n\n";

int *b;
b = &matrice[4,4];   

行列は次のように定義されています:int matrice[5][5];通常の int 値で埋めました。

最初の割り当ては機能しますが、2 番目の割り当てはエラーで機能しません。

a value of type "int (*)[5]" cannot be assigned to an entity of type "int * ".

どちらもコンパイル時にエラーになると思っていました。

この異なる動作がある理由を説明できますか?

4

3 に答える 3

7

表現

&matrice[4,4]

式が

4,4

に評価され4ます。これは、両方のオペランドを評価して 2 番目のオペランドを返すコンマ演算子の例です。

于 2013-10-20T17:10:28.620 に答える
2

&matrice[4][0]は typeであり、これも type にint *割り当てています。これには何も問題はありません。どんな種類のエラーも発生しません。 aint *

matrice[4,4]は 2D マトリックスを表すのではなく、演算子matrice[4]の効果により に評価され、タイプはです。これを試して; ,&matrice[4]int(*)[5]

 b = &matrice[4][4];
于 2013-10-20T17:09:34.293 に答える
0

最初のケースでは、ポインタ アドレスを に割り当てていますamatriceはポインターの配列へのポインターとして内部的に定義されており、そのようなベクトルのアドレスを に取得していますa

2 つ目は、インデックス参照内でカンマ演算子を使用しています。それも間違っています。

于 2013-10-20T17:10:48.807 に答える