-3

C を使い始めたばかりで、理解できないコード行に出くわしました。誰かがそれが何をするのか説明できますか?

short int * work = (short int *) malloc(1000*16);
4

4 に答える 4

5

何を正確に理解していないのですか?short int*このコードは、1 つ以上の 16 ビット (少なくとも16 ビット) の符号付き整数へのポインターであるa を宣言します。によって返されるポインターに初期化します。これは、バイトmallocに十分な大きさのメモリのチャンクです。1000 * 16

では、なぜ彼らは を使用したの1000 * 16でしょうか。知らない。num_elements * sizeof(element)通常、の行に沿って割り当てますnum_elements * sizeof(short int)

より標準的にnum_elements * sizeof(*work)は、ポインターの型を変更してもコードが壊れないように使用します。

また、C で malloc の戻り値をキャストするのは悪い考えであることに注意してください。

于 2013-02-27T03:17:25.730 に答える
2

mallocを使用して(動的に=実​​行時に)1000 * 16=16000バイトを予約しています。mallocを使用すると、予約されている16000バイトの最初のバイトのアドレスへのポインターが得られます。結果は、「work」という名前の短い整数のポインターに格納されます。通常、すべての短整数のサイズは2バイトであるため、基本的に、mallocには8000個の短整数用のスペースが予約されています(成功した場合)。

mallocがスペースの割り当てに失敗した場合、NULLを返します。

最後に、mallocが返したものをキャストすることは悪い習慣です。

于 2013-02-27T03:23:34.763 に答える
2

タイトルに「宣言」を見ました。

彼らは、複雑な宣言のための非常に優れた Web サイトを持っています。ここ

于 2013-02-27T04:23:51.963 に答える
2

それを分解しましょう:

  • short int * work

intこれは、 と呼ばれるへのポインタを宣言しますwork。として宣言されてshort intいます。つまり、次のようにする必要があります。

  • 少なくとも 16 ビットの長さ (または 2 つの 8 ビット バイト)、および
  • 平野より大きくないint

一般に、ショートパンツは、intサイズが大きすぎる場合に使用されます。ウィキペディアには、C データ型の優れた内訳があります: http://en.wikipedia.org/wiki/C_data_types

  • = (short int *) malloc(1000*16);

これにより、1000*16 バイトが割り当てられ、ポインターに割り当てられます。詳細についてmalloc() は、malloc()man ページを参照してください。この特定の行は、次の理由で不適切なスタイルの例です。

代わりに次のように書く方がよいでしょう:

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

于 2013-02-27T03:21:01.430 に答える