2011-08-02 16 views
1

配列変数に続くポインタがあります。Cの配列へのポインタ:アドレスの算術と配列の割り当て

int (*p)[3]; 
int a[3] = { 1,2,3 } ; 
int b[3] = { 11,22,33 } ; 
int c[3] = {111,222,333} ; 

これら3つの配列を変数pに格納します。どのように私はp のメモリを割り当てる必要がありますどのようにのの配列のようなこれらの3つの配列を格納する必要があります。これが可能かどうか...?そしてどうやって..?

注:

p = (int (*)[])malloc(3);
Now this p is capable of pointing three integer array which size 3 . How i have to assign these a,b,c to this p ?

+0

私はその質問を理解していないのでしょうか?完全なタイプを正確に教えてください。そのような:intへのポインタの配列、またはintの配列へのポインタの配列? –

+0

あなたのコード内のmallocは、3バイトを割り当てます。ポインターのサイズは現代のコンピューター上で少なくとも4バイトであるため、期待通りに3つの整数配列を指すことはできません。 – littleadv

+0

修正:あなたは 'p =(int(*)[])malloc(3 * sizeof(int *)); ' –

答えて

0
int* p[3]; 
int a[3] = { 1,2,3 } ; 
int b[3] = { 11,22,33 } ; 
int c[3] = { 111,222,333} ; 

p[0] = a; 
p[1] = b; 
p[2] = c; 

これだけです。

編集1

配列へのポインタ?

int** p; 
int a[3] = { 1,2,3 } ; 
//... 
p = &a; 

編集2

とintの配列へのポインタの配列:

int** p[3]; 
int a[3] = { 1,2,3 } ; 
//... 
p[0] = &a; 
//... 
+0

の配列のポインタに配列のポインタを要求しています... – Pavunkumar

+0

あなたのコードはエラーを出します:代入の互換性のない型 –

+0

あなたが求めているのはそれですか?そうでない場合は、あなたの質問を正確に言い換えることができますか?配列は、配列の最初の値を指すポインタなので、混乱する可能性があります。あなたが何をしたいのかを記述すると、私は自分の答えを更新します。 –

1

あなたはポインタのあなたの配列を宣言するときは、それが割り当てられていたメモリを割り当てる必要はありません。各ポインタは既に割り当てられたメモリを指している必要がありますが、a,b,cは自動的に/静的に割り当てられますので、心配する必要はありません。それらを配列pのメンバーに割り当てれば完了です。

pが配列へのポインタである場合、コードは次のようになります

int **p = malloc(sizeof(int*)*3); 
... 
p[0] = a; p[1] = b; p[2] = c; 
... 
free(p); /* when done*/ 

int *p[3]を宣言するポインタの配列ではなく配列へのポインタを作成します。

編集

あなたは配列へのポインタをしたい場合、あなたはこれを行うことができます:

int a[3]; 
int *p = a; 

をそして忘れてはいけない - あなたは配列へのポインタとして独自にaを使用することができます必要に応じて、別の変数は必要ありません。

+0

そこを見て、私は配列へのポインタを作成しました...ポインタの配列ではありません – Pavunkumar

+0

あなたは私を混乱させました。そこに作成したものへのポインタ? int [3]に?私の答えはまだ成り立ちます、それは本当に 'malloc 'には関係ありません、すべてのポインタは同じサイズです。 – littleadv

+0

そうです。しかし、配列変数へのポインタに代入したい。ポインタの配列またはポインタへのポインタではありません。 – Pavunkumar

関連する問題