以前、変数とは、メモリ(保存領域)上に名前を付けて、その領域を確保することだと話しました。
int Variable;
と宣言すると、メモリ上に整数が入る領域Variableを確保することを意味するのです。
そして、Variable という名前をソースコードで用いると、Variableという名前の領域に入っているデータを参照します。

では、ここで新しい演算子の紹介です。
それは……&演算子です。
&を変数の先頭に付けると、その変数の領域のデータではなく、その変数のアドレスを表します。
アドレスとは、具体的にメモリのどこに変数の領域があるのかを表したいわば住所です。

つまり、
int Variable;
Variable; // Variableに格納された値を表す。
&Variable; // Variableのアドレスを表す。


ということです。

メモリを直接見ることはできませんが、想像することはできます。
コンピュータの内部には、変数を保存しておく領域があり、その領域にデータを配置することで計算に都合をつけています。

その領域のデータを参照する時は、変数名をそのまま用いればよいのです。
その領域そのものを参照する時は、&変数名を用いればよいのです。

ものは試しで、サンプルコードを打ち込んでみましょう。


55

※尚、お使いの環境によってアドレスの値は変わります。

コンピュータ内部のメモリを図で表すとこんな感じです。
56

int 型(整数型は4バイト)なので、4ずつアドレスの値が変わっています。
char型だと1バイトなので1ずつアドレスの値が変わります。

つまり、変数の場所を把握する演算子が&演算子です。
また、変数の場所のことをアドレスと呼びます。

現実世界で物を届ける時に、住所を把握することでスムーズに配達できるように、
コンピュータの世界でもなんらかのデータを送出する時に、送出先のアドレスを把握しておけばスムーズに配送ができるのです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

と、言ったところで早速アドレスを使ってみましょう。

scanf関数を学習します。
scanfは、printfと対になる関数で、ユーザーが標準入力(キーボード)から入力したデータを変数へ配送します。

int scanf(const char *format, ...)

また難しいことが書いてあるように見えますが、使い方はシンプルです。

scanf("フォーマット指定子で変数の型を指定", 格納する変数のアドレス);
復習:フォーマット指定子は、%dや%fのことです。
こんな感じです。例えば int Variable; へ値を格納する場合、scanf("%d", &Variable);と書けばよいのです。

それでは、ユーザーへキーボードへの入力を促し、入力された値を出力するプログラムを書いてみましょう。


57


#pragma warning(disable : 4996)という見慣れない記述がありますが、
scanfは安全な関数ではないため、Visual Studio が勝手にエラーにします。
しかし、今は実用的なアプリケーションを作成することよりも、シンプルに学習することに重点を置いているので、その警告を無視する為にプラグマを書いているのです。

なお、プラグマはC言語の文法とは全く関係ありません。
実用的なアプリケーションを書く時は、より安全なscanf_sを使うべきです。


また、ユーザーからの入力を受け付けると、ブレークポインタが発動してコンソール(黒い画面)がウィンドウの後ろに引っ込むことがあります。
これはコンソール特有の挙動なので、あまり気にしないで下さい(学習環境でのみ起こる現象です)


では続いて、半径(少数)を入力して貰い、その値を2乗し、3.1415を掛けることで面積を表示するプログラムを書いてみましょう。

58


ここでPOINTなのですが、scanfにてdouble型を指定する時は、"%lf"を使って下さい。(lはアルファベットのエルです)なぜprintfは%fを使い、scanfは%lfを使うのかを説明すると、このページでは余白が足りないので、気になる方はご自身で調べてみて下さい。

問21:上で作成したプログラムに5(整数)を入力するとどうなるか?


問22:ユーザーから整数または少数の入力を2回受け付け、その値同士を足し算して結果を表示するプログラムを書きなさい。