2017-03-26 20 views
0

im to Cので、ここで使用する正しい単語ではない可能性があります。ポインタに2d-arrayの最初のポインタを割り当てます。

私はintのポインタへのポインタを返すこのような関数があります。 main()関数で

int **foo(){} //I wouldn't care much what this function does 

は、私はこの

int playground[10][10]; 
playground=foo(); 

のように配列を定義した。しかし、コンパイラは、このエラーを私に警告し:配列型 遊び場= fooで表現へ

割り当て();

ここで実際に何が間違っていますか?私が知る限り、遊び場は2d配列なので、intのポインタを指すポインタとなります。正確にはどの関数foo()が返ります。

誰かが説明できますか?どうもありがとう!

+0

ちょうどint **の遊び場として遊び場を定義する; foo()の中に2次元配列のためのスペースを割り当てる必要があるかもしれません。 – Shiping

+0

私は知っている限り、 "遊び場"を書くとき、それは実際に配列の最初の要素へのポインタを意味するので、私は、メモリ問題を世話しましたが、なぜ私の方法didntの仕事は、この例では動作しますか? –

+0

プレイグラウンド[10] [10]は2次元配列へのポインタではなく2次元配列ですが、foo()は2次元配列へのポインタを返します。 – Shiping

答えて

0

配列はポインタではありません。特に、配列は代入可能な左辺値ではないため、代入文の左側に決して配列名を置くことはできません。あなたは欲しい:

int **playground; 
playground = foo(); 
+0

ありがとうございますが、私はいつも "プレイグラウンド"を書くと、cが配列の最初の要素へのポインタを与えるだろうと思っていましたか? –

+0

必ずしもそうではありません。例えば、配列が 'sizeof'によって操作されたときです。必要なすべての詳細を取得するには、[comp.lang.c FAQ /アレイとポインタのセクション](http://c-faq.com/aryptr/index.html)を参照してください。この場合、 –

+0

は、データ/値検索用の配列の場所を指しますが、他の場所を指すように変更することはできません。 – Shiping

関連する問題