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を格納できていたものね。


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が格納されているわけだ


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


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


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


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


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


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



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


そのとき 文字が格納されるメモリの場所をあらわしています


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


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


そのとき 整数値が格納されるメモリの場所をあらわしています


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


整数値2なら


00000000 00000000 00000000 00000010

 👆    👆    👆   👆

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


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


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


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


変数aのアドレスとは


00000010

00000000

00000000

00000000


このように


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


先頭の

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


つまり


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

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

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

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


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


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


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




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


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


そのとき 実数値が格納されるメモリの場所をあらわしています


そして 

char型の変数a

int型の変数a

float型の変数a


であっても



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



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

作者を応援しよう!

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

応援したユーザー

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