• 締切済み

配列とポインタと同時に使用する宣言について

配列とポインタを同時に使用した場合、どのように確保されるのかイマイチ理解しきれていません。 例えば、 char *pointer[10]; と宣言した場合、 pointer[0]="ABC" pointer[1]="DEF" ・・・・ のようにポインタ型を配列で管理する、という風に認識しています。 一方で char (*pointer)[10] とした場合、どのように確保されるのでしょうか?

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

サイズについては (既に指摘があるので) おいておくとしても, その 2つを ・char *p; → ポインタとして4バイトの領域をひとつ確保 ・char (*p)[10]; → char型の領域を10個確保し、それを1つのポインタ*pointerで管理する と並べてみると, 一貫性がないことに気付くんじゃないかなぁ. 下の「char型の領域を10個確保し」に相当する部分は, 上ではどこに消えたの? ちなみに char 1個は 1バイト.

すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

手許の環境では、ポインタは8バイトです。 サイズを決めつけるのはやめましょう。 たしかに、Cではメモリ管理は大事ですが、機能として考えるときは、メモリ上の動きを少し忘れることも大事だと思います。 char *pointer1[10]; は 「char *」型の大きさ10の配列  ポインタが10個用意されます。 char (*pointer2)[10]; は 「char [10]」型へのポインタ  ポインタが1つ用意されます ポインタを宣言しただけでは、その中身は不定です。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

ちゃいます. 「char型の領域を10個確保」などということはしません. え~と, 一応確認ですが char *ptr; に対してどのような認識を持っていますか?

error503
質問者

補足

char *ptr;の場合 ポインタとして4バイトの領域をひとつ確保 char *ptr[10]の場合 4バイトの領域を連続で10個確保する。 と認識しています。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ポインタを 1個だけ確保する.

error503
質問者

お礼

ありがとうございます。 char (*pointer)[10]の場合はchar型の領域を10個確保し、それを1つのポインタ*pointerで管理する。 ということなのでしょうか

すると、全ての回答が全文表示されます。

関連するQ&A