sizeof演算子でint型,float型,double型,配列のデータ格納可能容量(バイト数)を調べてみます sizeof(int)はただの数値データ💖4💖を表します  

アレサ「配列に格納されている文字数を調べた後は


変数の型 

intが4バイト

doubleが8バイトのデータ格納容量をもっていたように


配列のデータ格納可能容量(バイト)がどれくらいかを調べてみましょう。



        sizeof演算子の仕組みはとても簡単で


sizeof(int)


sizeof(float)


sizeof(double)


のように


()の中に変数の型を記述してもちいます」


ソーラー「え~~簡単なのお~😊」


アレサ「sizeof演算子は


変数の型のデータ格納容量を(バイト数で)示すことができます


変数の型

int

float

double

4バイト

4バイト

8バイト

のデータ格納容量をもつので


sizeof(int)は4


sizeof(float)は4


sizeof(double)は8


と等しくなります


つまり


sizeof(int)


sizeof(float)


sizeof(double)


         💖数値データ💖



を表すことになります


そのプログラムはこちらです

👇

#include <stdio.h>

int main(void)

{

printf("変数の型intのデータ格納容量は%dバイトです \n",sizeof(int));


printf("変数の型floatのデータ格納容量は%dバイトです \n",sizeof(float));


printf("変数の型doubleのデータ格納容量は%dバイトです \n",sizeof(double));


return 0;

}


ビルド実行結果


変数の型intのデータ格納容量は4バイトです

変数の型floatのデータ格納容量は4バイトです

変数の型doubleのデータ格納容量は8バイトです


ソーラー「


sizeof演算子は


変数の型のデータ格納容量を示すことができます



sizeof(int)=4


sizeof(float)=4


sizeof(double)=8


のように


sizeof(int)

sizeof(float)

sizeof(double)


はただの


       🌞数値データをあらわすことになる🌞


ということはいろんなところで出てくるので


要チェックなんだよ」


アレサ「さらに


sizeof演算子は


配列のデータ格納容量を示すことができます


その場合は


配列名にsizeof演算子を作用させることになります



次のプログラムをご覧ください

👇


#include <stdio.h>

int main(void)

{

char hairetu[10000];

printf("配列hairetuのデータ格納容量は%dバイトです \n",sizeof(hairetu));

return 0;

}


コンパイル結果


配列hairetuのデータ格納容量は10000バイトです



このプログラムでは


char型の配列宣言


char hairetu[10000];


を実行したのち


(この場合は配列の容量を調べるだけなので


配列の中身を初期化していません)


printf("hairetuの格納容量は%dバイトです \n",sizeof(hairetu));



sizeof(hairetu)のようにsizeof演算子をつかい


配列hairetuの格納容量(バイト数)を


printf出力表示しています。


このように


配列名hairetuにsizeof演算子を作用させて


char hairetu[10000];


によって作られるchar型の配列hairetuのデータ格納容量(バイト数)を調べています。」


ソーラー 「ねえ、アレサ、


sizeof(hairetu)を実行したら


10000と表示されたよ


char hairetu[10000];


により生成される配列hairetuのデータ格納容量は


10000バイトになったよ


随分おおきいんだね。感心、感心。(^^)


これなら かなりの量の文字列データを格納できるよね。


ところで


なんで配列hairetuのデータ格納容量は10000バイトになるんだと思う?」


神妙にしているアレサに面白そうに質問してみる。


アレサ「は、はい・・それは


たとえば配列の要素数を5として


char hairetu[5]としたときは


hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


のように配列内にデータのいれもの


char型の配列変数が5つできています


char型の配列変数の1つ


hairetu[0]を例にとると


hairetu[0]



2バイトのデータ量をもつ 


2バイト文字 ひらがなや漢字でなく


1バイトのデータ量で表される


「半角英数字または-128から127までの数値」を


おさめるようにできています。


つまり


hairetu[0]

のデータ格納容量は1バイトとなっているのです。


hairetu[0]


につづく

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

のデータ格納容量もそれぞれ1バイトとなっています。




ですので


char型の配列 hairetu[5]は


配列変数を


hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

のように5つもつので



配列変数1つ×5=5バイトのデータ格納容量をもつことになります。


このプログラムの


char型の配列 hairetu[10000]


の場合ですと


配列変数1つ×10000=10000バイトのデータ格納容量を


もつわけですの。


それでは


char型の配列宣言でなく


int型の配列宣言


int hairetu[5];


をおこなったときの


配列hairetuのデータ格納容量はいくらになるでしょうか?


int hairetu[5];


を実行したときも


hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

のように


配列変数が5つできています




🍓int🍓の配列変数の1つである


hairetu[0]



4バイトのデータ量であらわされる整数値データを


おさめるようにできています。


つまり


hairetu[0]

のデータ格納容量は4バイトとなっています。


ですので


int hairetu[5];


により生成される


配列 hairetuは


int型の配列変数1つのデータ容量4バイト×5=


20バイトのデータ容量をもつことになります。


実際にsizeof演算子をつかって


int型の配列 hairetu[5]のデータ格納容量を調べてみると


#include <stdio.h>

int main(void)

{

int hairetu[5];

printf("配列hairetuのデータ格納容量は%dバイトです \n",sizeof(hairetu));

return 0;

}


コンパイル結果


(EAZY IDECの場合)

(Visual Studioの場合)


配列hairetuのデータ格納容量は20バイトです


となっているのがわかります。」


ソーラー「なあるほど。アレサ、わかりやすい・・な」


ソーラー

「ではでは(^^)~、も~し


char hairetu[10000]を文字を入力して初期化


つまり


char hairetu[10000]="nekoneko";


を実行した場合は


配列hairetuのデータ格納容量(バイト数)はどうなるのかな


nekonekoを格納したのだから(半角英数字1文字1バイト)×8で


8バイトになるのかな。


#include <stdio.h>

int main(void)

{

char hairetu[10000]="nekoneko";

printf(" hairetuの格納容量は%dバイトです \n",sizeof(hairetu));

return 0;

}


アレサ「うふっ それではコンパイルしてみます」



コンパイル結果


hairetuの格納容量は10000バイトです



ソーラー 「8バイトじゃなくて10000バイト・・・


ああ、そうか


配列hairetu自体のデータ格納容量をしらべているから、なかに


どれだけ文字データが格納されているかは関係ないんだ・・」


アレサ 「なにか、外付けハードディスク自体のハードディスク容量と


中に書き込まれているデータ量の関係に似ていますの。」



ソーラー「では最初から配列に要素数を記入せず


自動的に配列内の格納容量がきめられる


char hairetu[]="nekoneko";


と配列宣言、初期化した場合はどうなるのかな?


#include <stdio.h>

int main(void)

{

char hairetu[]="nekoneko";

printf("hairetuのデータ格納容量は%dバイトです \n",sizeof(hairetu));

return 0;

}


コンパイルしてみると・・・


コンパイル結果


hairetuのデータ格納容量は9バイトです


ソーラー「nekonekoと8文字(8バイト)格納して


hairetuのデータ格納容量は9バイト・・?」


アレサ「ソーラーさん、このような要素数を記述しない配列宣言


char hairetu[]="nekoneko";を行ったときは


"nekoneko"にあわせて配列hairetuの大きさ


つまり hairetu[]の[]の中の要素数はきめられていきます。


この場合


char型の配列 hairetuには

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

hairetu[5]

hairetu[6]

hairetu[7]

hairetu[8]


が生成され


hairetu[0]='n'

hairetu[1]='e'

hairetu[2]='k'

hairetu[3]='o'

hairetu[4]='n'

hairetu[5]='e'

hairetu[6]='k'

hairetu[7]='o'

hairetu[8]='\0'


と文字列データ"nekoneko"が格納されています


"nekoneko"は文字列なので


文字データ

'n'

'e'

'k'

'o'

'n'

'e'

'k'

'o'

'\0'

で成り立っています


ですので


自動的に

ナル文字データ'\0'が


配列変数 hairetu[8]に格納されることになります



つまり


char hairetu[]="nekoneko";を行ったときは


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

hairetu[5]

hairetu[6]

hairetu[7]

hairetu[8]

が生成されています


sizeof演算子をhairetuに用いた


sizeof(hairetu)

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

hairetu[5]

hairetu[6]

hairetu[7]

hairetu[8]

のデータ格納容量


9バイト



9


をあらわすことになったのではないですか?


printf("hairetuのデータ格納容量は%dバイトです \n",sizeof(hairetu));


においては


char型の配列 hairetu[]のデータ格納容量が


printf出力表示されたのではないですか?」


ソーラー 「あっナル文字\0があったか・・・」 

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る