は、以下のコードを考えてみましょう:C/C++のポインタ
int x[] ={10,20,30,40,50};
int *p;
int **q;
p = x; /* Obviously p now holds base address of array. So no problem here */
q = &x; /* Error. Why? */
私はgccのコンパイラでこのエラーを取得しています。
error: cannot convert ‘int (*)[5]’ to ‘int**’ in assignment q = &x;
配列変数は、配列の最初の要素への定数ポインタと考えることができます。次に、定数ポインタのアドレス、すなわち& xをポインタ変数qのポインタに割り当てることができないのはなぜですか?
'&X 'ので、[5]'、 'ないint型**' 'int型(*)型である - エラーメッセージが言うだけのよう。あなたはスペルから見ることができるように、それらはかなり異なるタイプです。ポインタの配列として値を扱うと、ポインタの配列ではないので、恐ろしい問題が発生します。 –
@ JonathanLefflerしかし、コンパイラは 'int []'から 'int *'への代入を許可しています。違いは何ですか? – lxop
私は何度も繰り返し言います:配列はポインタではなく、ポインタは配列ではありません。 cc @lxop –