-4

次のコードでは:

int main()
{
   char names[2][11] = {"Manchester","Party"};
   char (*jk)[11];
   jk = names;                    // LINE 1
   char gaming[10] = {"Jetking"};
   char (*po)[10];
   po = &gaming;                  // LINE 2
   cout<<"PO is "<<*po;

2行目では、ゲームの前に置く必要がありますが、1行目では必要ありません。2行目に表示されないエラーは、「エラー:割り当てで'char [10]'を'char(*)[10]'に変換できません」ですか?私はこの部分を完全に理解していませんでした。「char(* po)[10];」以降 10文字の配列へのポインタとして解釈できます。

4

3 に答える 3

1

char gaming[10]charの配列です。を書くpo = gamingと、ゲームはこの割り当てのcharへのポインタに変換されます。poただし、は文字の配列へのポインタです。

したがって、最終的に、コンパイラは、をに変換できないことを通知しpointer to charますpointer to an array of chars。それで全部です。

于 2013-01-13T00:44:14.170 に答える
1

課題で

jk = names;

namesタイプの配列はchar[2][11]最初の要素へのポインターに変換されるため、に減衰しchar (*)[11]ます。

gamingchar*ただし、ほとんどのコンテキストでに変換されます。これは、、を持つchar*タイプと互換性がないため、割り当ては無効です。のアドレスを取得すると、正確に必要なを取得できます。pochar (*)[10]gamingchar (*)[10]

于 2013-01-13T00:47:11.953 に答える
1
char (*po)[10];

char10項目の配列へのポインタです。

配列式は、それ自体を配列としてポインターに減衰しません。それは(そうなると)最初のアイテムへのポインタに減衰します。したがって、アドレス演算子を適用する必要があります。また、配列式を配列へのポインタに変換できないというエラーメッセージも表示されます。

于 2013-01-13T00:47:14.890 に答える