2012-02-17 9 views
5
int (*p)[2]; 
p=(int(*))malloc(sizeof(int[2])*100); 

配列へのポインタをmallocする正しい方法は何ですか? (int(*))を使って部品を見つけることができません配列へのmallocポインタ

+2

C '(int(*))では避けてください。 'malloc'の戻り値をキャストしないことをお勧めします。 –

+0

oh wowコンパイルエラーはありません。 – titus

+1

本当に本当にキャストしたい場合は、 '(int(*)[2])'にする必要があります。 '(int(*))'は 'int *'です。 'malloc'に渡されるサイズはうまく見えます(2 intの配列に100ポインタのサイズを割り当てます) –

答えて

8

回答としてのコメント投稿:
Cには、戻り値mallocをキャストしないでください。返り値mallocの型キャストがCには適していない理由について詳しくは、this postを参照してください。何らかの理由で実際にキャストしたい場合は、(int(*)[2])にする必要があります。 (int(*))int *です。 mallocに渡されるサイズはきれいに見えます(2 intの配列に100ポインタのサイズを割り当てる)。だからあなたはすべきである

int (*p)[2]; 
p=malloc(sizeof(int[2])*100); 

これは役に立ちます!

-1

ここで必要なものは不明です。たとえば、100個の整数のペアをintのポインタの配列(各ポインタがちょうど2つのintを指している)として配列している場合は、mallocをintへの100個のポインタに対して100回呼び出して、毎回2つの整数を割り当てる必要があります。

「mallocを配列へのポインタにするのは意味がありません」。配列をmallocしてそのアドレスをポインタに割り当てることもできますし、ポインタの配列をmallocすることもできます。しかし、あなたが尋ねたことははっきりしていません。

+1

でも、実行時に100個のポインタが必要だとわからない場合はどうすればいいですか? 10000が必要な場合はどうすればいいですか?私はそれを正しくやっていると思う。 – titus

+2

私はOPがここで必要とするものはかなり明確だと思う。 –

関連する問題