2012-03-14 7 views
0

引数として関数に渡すための行列の先頭へのポインタを作成しようとしています。私はエラーが出るのにこれを行うことで行列の最初の値へのポインタを作成する

int **p; 
p = &(&matrix[0][0]); 
func(p); 

:ここに私が持っているものだ「左辺値は単項 『&』のオペランドとして必要なの。」私はそれが正しい構文を持たない私の問題だと思っていますが、そうではないかもしれません。どんな助けでも大歓迎です。

+5

'p = matrix'となります。 – perreal

+1

@perreal pがどのように宣言されるかによっては、コンパイルされないこともあります。 –

答えて

4

まあ、matrix[0]は、(それ自体がポインタではありませんが、配列ではありますが)行列の先頭を指します。したがって、次のようにする必要があります:

int* = matrix[0]; 
+0

行列[0]にもこのようにアクセスすることはできません。やってみました?多分&matrix [0] [0]。しかし、彼は行列を関数内の配列として扱わなければならないでしょう。またはそれをキャストします。しかし、無効な型にキャストしようとするならば、単にvoid *にキャストしてください。 – Spidey

+0

@Spideyなぜ動作しませんか?私のために働く。 –

+0

さて、私はもっと勉強しなければならないと思います。しかし、それは私には分かりません。 matrix [0]がint *の場合、行列はint **です。そして、そうではありません。私はそれがただの偏見だと思っています... – Spidey

0

この機能を使用するには、int [] [SIZE]パラメータまたはint * [SIZE]パラメータが必要です。 C行列は線形化されているので、ポインタへのポインタのように扱うことはできません。

2

行列[0] [0]はintなので、アドレスは&行列[0] [0]です。あなたがしたいのは

p = &matrix[0][0]; 
関連する問題