C を使い始めたばかりで、理解できないコード行に出くわしました。誰かがそれが何をするのか説明できますか?
short int * work = (short int *) malloc(1000*16);
C を使い始めたばかりで、理解できないコード行に出くわしました。誰かがそれが何をするのか説明できますか?
short int * work = (short int *) malloc(1000*16);
何を正確に理解していないのですか?short int*このコードは、1 つ以上の 16 ビット (少なくとも16 ビット) の符号付き整数へのポインターであるa を宣言します。によって返されるポインターに初期化します。これは、バイトmallocに十分な大きさのメモリのチャンクです。1000 * 16
では、なぜ彼らは を使用したの1000 * 16でしょうか。知らない。num_elements * sizeof(element)通常、の行に沿って割り当てますnum_elements * sizeof(short int)。
より標準的にnum_elements * sizeof(*work)は、ポインターの型を変更してもコードが壊れないように使用します。
mallocを使用して(動的に=実行時に)1000 * 16=16000バイトを予約しています。mallocを使用すると、予約されている16000バイトの最初のバイトのアドレスへのポインターが得られます。結果は、「work」という名前の短い整数のポインターに格納されます。通常、すべての短整数のサイズは2バイトであるため、基本的に、mallocには8000個の短整数用のスペースが予約されています(成功した場合)。
mallocがスペースの割り当てに失敗した場合、NULLを返します。
最後に、mallocが返したものをキャストすることは悪い習慣です。
タイトルに「宣言」を見ました。
彼らは、複雑な宣言のための非常に優れた Web サイトを持っています。ここ
それを分解しましょう:
short int * workintこれは、 と呼ばれるへのポインタを宣言しますwork。として宣言されてshort intいます。つまり、次のようにする必要があります。
int。一般に、ショートパンツは、intサイズが大きすぎる場合に使用されます。ウィキペディアには、C データ型の優れた内訳があります: http://en.wikipedia.org/wiki/C_data_types
= (short int *) malloc(1000*16);これにより、1000*16 バイトが割り当てられ、ポインターに割り当てられます。詳細についてmalloc() は、malloc()man ページを参照してください。この特定の行は、次の理由で不適切なスタイルの例です。
short int標準で定義されていないため、この行で特定の数の が生成されるとは限りませんshort int。代わりに次のように書く方がよいでしょう:
short int * work = malloc(sizeof(short int) * NUMBER_OF_SHORT_INTS_REQUIRED);
または、さらに良い:
short int * work = malloc(sizeof(work[0]) * NUMBER_OF_SHORT_INTS_REQUIRED);
NULLで何かを行う前に、必ず malloc が返されていないことを確認してくださいwork。