scanf関数をつかって半角英数字1文字分の文字データをchar型の変数に格納する


scanf関数をつかって半角英数字1文字分の文字データをchar型の変数に格納する




ソーラー「scanf関数よ その尊い真の力を発揮したまえ


文字データをchar型の変数に取り込み給え」


しゅびびびび~~~ん


新種の蛇 scanf


「にょほほほ~い」


#pragma warning(disable: 4996)


#include <stdio.h>


int main(void)

{

char a;

scanf("%c",&a);

printf("%c",a);


return 0;

}


プログラムの実行結果


n(とキーボードから入力すると)

n


新種の蛇 scanf


「おいちい おいちい この文字n」


ソーラー 「な~んだ 文字データもchar型の変数aに格納できるじゃないか?」


新種の蛇 scanf


「にょほほほ~~い」


ソーラー 「まあ できるんじゃないかとはおもっていたんだけど


だって

👇


#include <stdio.h>


int main(void)

{

char a='n';

printf("%c\n",a);


return 0;

}


プログラムの実行結果


n


普通にchar型の変数aに 文字データ'n'を格納できていたものね。

(文字データ'n'とは正確には文字nの画像データに割り当てられたアスキーコードのことです)

scanf関数をつかって


文字データをchar型の変数aに格納できないわけもないか・・・


👇今のこのプログラムでは

#pragma warning(disable: 4996)


#include <stdio.h>


int main(void)

{

char a;

scanf("%c",&a);

printf("%c",a);


return 0;

}


プログラムの実行結果


n(と入力すると)

n


scanf関数を使って


char型の変数aのアドレス&aのメモリにあてて文字データ'n'が格納されているわけだ

(文字データ'n'とは正確には文字nの画像データに割り当てられたアスキーコードのことです)

そして 変数aに格納された文字データ'n'を


%c出力変換指定子をつかって printf出力表示したんだね。

(文字nの画像データに割り当てられたアスキーコードを使って文字をコマンドプロンプト画面に呼び出しています)


🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊🍊


以前のエピソードでアドレスについてお話ししましたが


ここでもアドレスについて説明してみます



        ☆char型の変数aのアドレスとは☆



char型の変数aには文字データが1文字格納されますが


そのとき 文字データが格納されるメモリに付けられている番号が


char型の変数aのアドレスとなります


char型の変数aは1バイトのデータ格納容量をもち


例えば


char a='a';


が実行されて


char型の変数aに文字データ'a'が格納されたなら


アドレス番号004FF913のメモリ(このアドレスの値はパソコンの使用状況などによって異なってきます)に


01100001 (10進数で表すと97です)


が格納されることになります


文字aの画像データには01100001 (10進数で表すと97です)


が割り振られていて


この


01100001 (10進数で表すと97です)


を用いて文字aの画像データにアクセスすることができるというわけです




int型の変数aのアドレスなら


int型の変数aには整数値が格納されますが


そのとき 整数値が格納されるメモリの中の先頭のメモリに付けられた番号が


int型の変数aのアドレスとなります



int型の変数aは4バイトの格納容量をもち


int a=2;


が実行されたとき


整数値2は


00000000 00000000 00000000 00000010

 👆    👆    👆   👆

1バイト 1バイト  1バイト 1バイト


のようにメモリに格納されています。


メモリの1バイトごとにアドレスはつけられているので


int型の変数aは4つのアドレスをもつことになります。


int型の変数aのアドレスとは


int a=2;


が実行されて


アドレス番号003FFE5Cのメモリに 00000010

アドレス番号003FFE5Dのメモリに 00000000

アドレス番号003FFE5Eのメモリに 00000000

アドレス番号003FFE5Fのメモリに 00000000

(合計4バイト=32ビット)

のように


数値データ2がメモリに格納されているなら


先頭の

00000010を格納しているメモリのアドレス003FFE5Cになります。


つまり


00000010を格納しているメモリのアドレス003FFE5C

00000000を格納しているメモリのアドレス003FFE5D

00000000を格納しているメモリのアドレス003FFE5E

00000000を格納しているメモリのアドレス003FFE5F


の4つのアドレスを代表した


00000010を格納しているメモリのアドレス003FFE5Cが


変数aのアドレス003FFE5Cとなっているのです。


同様に


float型の変数aのアドレスなら


float型の変数aには実数値が格納されますが


そのとき 実数値が格納されるメモリの中の


先頭のメモリにつけられた番号が


float型の変数aのアドレスとなります


そして 

char型の変数a

int型の変数a

float型の変数a


であっても


変数aのアドレスは&(アンパサンド)をつかって&aと表されます



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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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