char型、char*型の配列宣言、初期化がおこなわれるときのブロック{}の仕組みを考察してみます
ソーラー「今日は
char型の配列宣言、初期化
char hairetu[3] = {'a','b','c' };
が実行されるときのブロック{}の仕組みを考察してみます」
てんC「ブロック{}の仕組みですか?」
ソーラー「そう、
ブロック{}の仕・組・み💖」
てんC「???」
ソーラー「
まず
char hairetu[3];
hairetu[0] ='a';
hairetu[1] ='b';
hairetu[2] ='c';
の仕組みからみていこうかな
char hairetu[3];
が実行されると
char型の配列変数
hairetu[0]
hairetu[1]
hairetu[2]
が生成されるので
hairetu[0] ='a';
hairetu[1] ='b';
hairetu[2] ='c';
のように
char型の配列変数
hairetu[0]
hairetu[1]
hairetu[2]
に
文字データ
'a'
'b'
'c'
を格納することができます
char hairetu[3];
hairetu[0] ='a';
hairetu[1] ='b';
hairetu[2] ='c';
をまとめて記述したものが
char hairetu[3] = {'a','b','c' };
というわけです
つまり
ブロック{}内には
💖
をコンマで区切って記述することになります
char hairetu[3] = {'a','b','c' };
によって生成される配列変数
hairetu[0]
hairetu[1]
hairetu[2]
は
char型の配列変数なので
ブロック{}内には
文字データ
もしくは
-128をから127までの数値データをコンマで区切って記述することができるというわけです
今の場合
生成される3つの配列変数
hairetu[0]
hairetu[1]
hairetu[2]
を初期化するために
ブロック{}内には
コンマで区切って文字データ'a','b','c'が記述されているというわけです
ということは
次のような記述も可能になります
char hairetu[3] = {'a',1,'c' };
どう?」
ソーラーさん「
文字データ'a','c'
に混ざって
数値データ97
がブロック{}内に記述されています
めずらしい記述ですね」
ソーラー「そうなんだよ
char hairetu[3] = {'a',97,'c' };
が実行されると
char型の配列変数
hairetu[0]
hairetu[1]
hairetu[2]
が生成されます
hairetu[0]
hairetu[1]
hairetu[2]
は
char型の配列変数なので
文字データ
や
-128から127までの数値データ
を格納することができます
ですので
char hairetu[3] = {'a',97,'c' };
が実行されると
char型の配列変数
hairetu[0] には文字データ'a'
hairetu[1] には数値データ97
hairetu[2] には文字データ'c'
が格納されるというわけです
そのことを示すプログラムは以下のようになります」
#include <iostream>
using namespace std;
int main() {
char hairetu[3] = { 'a',97,'c' };
cout << hairetu[0] << "\n";
cout << hairetu[1] << "\n";/*ここに注目*/
cout << hairetu[2] << "\n";
return 0;
}
ビルド実行結果
a
a
c
てんC「
cout << hairetu[1] << "\n";/*ここに注目*/
のビルド実行結果が
97ではなくa になっていますね
つまり
char型の配列変数
hairetu[1]
に
数値データが格納されている場合
その数値データ(アスキーコード)に対応する文字データが表示されるというわけですね
cout << hairetu[1] << "\n";/*ここに注目*/
の実行結果は
a
つまり
数値データ(アスキーコード)97に対応する文字データ
aが表示されているのですね
char hairetu[3] = { 'a',1,'c' };
も実行できるのですね
」
ソーラー「そうなんだ
次は
ポインタ型の配列宣言
char* hairetu[3] = {"apple","orange","lemon" };
が実行されるときのブロック{}の仕組みを考察してみます」
ソーラー「まず
char* hairetu[3];
hairetu[0] ="apple";
hairetu[1] ="orange";
hairetu[2] ="lemon";
の仕組みからみていこうかな
char* hairetu[3];
が実行されると
char*型の配列変数
hairetu[0]
hairetu[1]
hairetu[2]
が生成されるので
hairetu[0] ="apple";
hairetu[1] ="orange";
hairetu[2] ="lemon";
のように
char*型の配列変数
hairetu[0]
hairetu[1]
hairetu[2]
に
文字列データ
"apple"
"orange"
"lemon"
を格納することができます
char* hairetu[3];
hairetu[0] ="apple";
hairetu[1] ="orange";
hairetu[2] ="lemon";
をまとめて記述したものが
char* hairetu[3] = {"apple","orange","lemon" };
というわけです
つまり
ブロック{}内には
💖
をコンマで区切って記述することになります
char* hairetu[3] = {"apple","orange","lemon" };
によって生成される配列変数
hairetu[0]
hairetu[1]
hairetu[2]
は
char*型のポインタ変数なので
ブロック{}内には
char型の変数のアドレス
もしくは
文字列データ
を格納している連続したメモリの先頭のメモリのアドレスを格納することができます
生成されるchar*型の3つの配列変数
hairetu[0]
hairetu[1]
hairetu[2]
を初期化するために
ブロック{}内には
コンマで区切って文字列データ
"apple"
"orange"
"lemon"
が3つ記述されているというわけです
ということは
次のような記述も可能になります
char a=1;
char b=2;
char* hairetu[3] = {&a,&b,"orange"};
どう?」
てんC「ソーラーさん
変数aのアドレス&a
変数bのアドレス&b
に混ざって
文字列データ"orange"
がブロック{}内に記述されています
めずらしい記述ですね」
ソーラー「そうなんだよ
char a=1;
char b=2;
char* hairetu[3] = {&a,&b,"orange" };
が実行されると
char*型の配列変数
hairetu[0]
hairetu[1]
hairetu[2]
が生成されます
hairetu[0]
hairetu[1]
hairetu[2]
は
char*型の配列変数なので
char型の変数のアドレス
もしくは
文字列データ
を格納しているメモリのアドレスを格納することができます
char a=1;
char b=2;
char* hairetu[3] = {&a,&b,"orange" };
が実行されると
char*型の配列変数
hairetu[0] には変数aのアドレス&a
hairetu[1] には変数bのアドレス&b
hairetu[2] には"文字列データ"orange"を格納している連続したメモリの先頭のメモリのアドレス
が格納されるというわけです
そのことを示すプログラムは以下のようになります」
#include <stdio.h>
int main(void) {
char a=1;
char b=2;
char* hairetu[3] = {&a,&b,"orange" };
printf("%p\n", hairetu[0]);
printf("%p\n", hairetu[1]);
printf("%p\n", hairetu[2]);
return 0;
}
ビルド実行結果
0039FE2F
0039FE23
005D7B30
てんC「
hairetu[0] に格納されている変数aのアドレス&a
hairetu[1] に格納されている変数bのアドレス&b
hairetu[2] に格納されている"文字列データ"orange"を格納している連続したメモリの先頭のメモリのアドレス
が表示されていますね
char a=1;
char b=2;
char* hairetu[3] = {&a,&b,"orange" };
も実行することができるのですね(*´▽`*)」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます