人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: aki_720
●カテゴリ:コンピュータ インターネット
✍キーワード:バイト
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● i_kumagoro
●20ポイント

例えば

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()は環境によって変化します。


2 ● yocchan731
●20ポイント

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の要素数になることがわかると思います.


3 ● apple-eater
●20ポイント

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])は処理系に依存します。というか無意味。


4 ● ココサブ
●20ポイント

> 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;

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


5 ● yo-kun
●20ポイント

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


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

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

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



●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ