sizeof(a)のバイト数をsizeof(a[0])のバイト数で割った場合その値はどうなるのか?また、なぜその値になるのかをどなたか教えていただけますでしょうか?

回答の条件
  • 1人10回まで
  • 登録:2006/07/23 10:52:43
  • 終了:2006/07/30 10:55:03

回答(5件)

id:i_kumagoro No.1

i_kumagoro回答回数170ベストアンサー獲得回数582006/07/23 11:32:24

ポイント20pt

例えば

char a[10];

のように定義した場合のsizeof(a)とsizeof(a[0])についてということだと思いますので、その前提で回答します。

sizeof(a[0])はchar型のsizeof(通常は1)を返します。

一方で、sizeof(a)はchar型のポインタのsizeof(32bit環境では通常は4)を返します。

詳細はC言語の解説を参照して下さい。a[0]は配列中の値そのものを指しますが、aは配列の先頭のアドレスを指します。

sizeof(a) / sizeof(a[0])は、上記の場合は4になりますが、ポインタ(やint型)のsizeof()は環境によって変化します。

id:yocchan731 No.2

yocchan731回答回数119ベストアンサー獲得回数142006/07/23 12:52:21

ポイント20pt

aは配列ですから,

sizeof(a)は配列全体の大きさになります.

sizeof(a[0])はa[0]の大きさですから,

配列の要素の大きさになります.

例えば, int a[10]; (intは4バイト)

と宣言してあったとすれば,

sizeof(a)=40であり,sizeof(a[0])は4です.

また,sizeof(a)/sizeof(a[0])=10ですので,

配列aの要素数になることがわかると思います.

id:apple-eater No.3

apple-eater回答回数420ベストアンサー獲得回数82006/07/23 12:56:48

ポイント20pt

aは配列なんですよね?

(aがポインタだと話が変わるので念のため)

sizeof(a)は配列aに確保されたメモリのバイト数

sizeof(a[0])は配列aの要素の変数型のバイト数

なのでsizeof(a)/sizeof(a[0])は配列の要素数です。


蛇足

aがポインタなら

sizeof(a)はポインタa用に確保されたバイト数。これは処理系に依存。

sizeof(a[0])はポインタが指しているところの変数型のパイト数

なので

なのでsizeof(a)/sizeof(a[0])は処理系に依存します。というか無意味。

id:YasuyukiMiura No.4

ココサブ回答回数33ベストアンサー獲得回数72006/07/23 16:26:01

ポイント20pt

> sizeof(a)のバイト数をsizeof(a[0])のバイト数で割った場合その値はどうなるのか?


aが配列であれば、aはいくつ要素を持っているかが分かります。

仮にaが下のように定義されていた場合

int a[10];


sizeof(a) / sizeof(a[0])は

10になります。


> また、なぜその値になるのかをどなたか教えていただけますでしょうか?


sizeof(X)とすると、Xが何バイトを取っているかが分かります。

なので、「配列がとっているバイト数」を

「配列の要素の一つがとっているバイト数」で割れば

配列の中の要素数が分かります。

上記の例をとると、

int型が4バイトを取る環境として、

a[0]は4バイト、

aはint型が10個なので40バイト領域を取っています。

sizeof(a) / sizeof(a[0]は

40 / 4となり

aの要素数10が分かります。




この方法を利用すれば役に立つかもしれない例としては、

以前に

#define HOGEHGOE 20

int a[HOGEHOGE];


としていたのを

#define HOGEHOGE 20

#define PIYOPIYO 30

int a[PIYOPIYO];


に変更してもループなどで

int i;

for (i = 0; i < sizeof(a)/sizeof(a[0]); i++)

a[i] = i;

のようにしておけば、問題なくループできるなどがあるかと思います。

id:yo-kun No.5

yo-kun回答回数220ベストアンサー獲得回数302006/07/23 22:03:09

ポイント20pt

C言語で、なおかつaが単なる配列である前提ですが、


sizeof(a)は配列として用意している領域全体のバイト数を返します。

sizeof(a[0])は単に配列の一つ目の要素のバイト数を返します。

従って、sizeof(a)/sizeof(a[0])は、配列のサイズ(個数)になります。

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • うげ i_kumagoroの日記 2006-07-24 09:25:56
    何を勘違いしたか大嘘を書いてしまった。 question:1153619562 正解は他の回答者の書かれた通りで、配列名に対するsizeof()は配列全体の大きさを返す。 なので、sizeof(a) / sizeof(a[0]) は要素数にな
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません