天国にいけるC言語入門 ヘキサ構造体 ver2.2126
sizeof演算子でint型,float型,double型,配列のデータ格納可能容量(バイト数)を調べてみます sizeof(int)はただの数値データ💖4💖を表します
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があったか・・・」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます