int (*p)[2];
p=(int(*))malloc(sizeof(int[2])*100);
配列へのポインタをmallocする正しい方法は何ですか? (int(*))を使って部品を見つけることができません配列へのmallocポインタ
int (*p)[2];
p=(int(*))malloc(sizeof(int[2])*100);
配列へのポインタをmallocする正しい方法は何ですか? (int(*))を使って部品を見つけることができません配列へのmallocポインタ
回答としてのコメント投稿:
C
には、戻り値malloc
をキャストしないでください。返り値malloc
の型キャストがC
には適していない理由について詳しくは、this postを参照してください。何らかの理由で実際にキャストしたい場合は、(int(*)[2])
にする必要があります。 (int(*))
はint *
です。 mallocに渡されるサイズはきれいに見えます(2 intの配列に100ポインタのサイズを割り当てる)。だからあなたはすべきである
int (*p)[2];
p=malloc(sizeof(int[2])*100);
これは役に立ちます!
ここで必要なものは不明です。たとえば、100個の整数のペアをintのポインタの配列(各ポインタがちょうど2つのintを指している)として配列している場合は、mallocをintへの100個のポインタに対して100回呼び出して、毎回2つの整数を割り当てる必要があります。
「mallocを配列へのポインタにするのは意味がありません」。配列をmallocしてそのアドレスをポインタに割り当てることもできますし、ポインタの配列をmallocすることもできます。しかし、あなたが尋ねたことははっきりしていません。
でも、実行時に100個のポインタが必要だとわからない場合はどうすればいいですか? 10000が必要な場合はどうすればいいですか?私はそれを正しくやっていると思う。 – titus
私はOPがここで必要とするものはかなり明確だと思う。 –
C '(int(*))では避けてください。 'malloc'の戻り値をキャストしないことをお勧めします。 –
oh wowコンパイルエラーはありません。 – titus
本当に本当にキャストしたい場合は、 '(int(*)[2])'にする必要があります。 '(int(*))'は 'int *'です。 'malloc'に渡されるサイズはうまく見えます(2 intの配列に100ポインタのサイズを割り当てます) –