いつも感謝しています。Nです。
今回は、変数の有効範囲についてお話します。
特に初心者さんは、この変数の有効範囲についてあまり意識をしていないかもしれませんが、これをきちんと把握していないと、少し大きなプログラムになってくると、バグだらけのプログラムになってしまいます。
ですので、
初めの段階のうちに理解しておくことで、少し大きなプログラムを書き出したときに、バグで悩む必要が軽減されますので、是非マスターしておいてくださいね。
では具体的にお話ししていきます。
まず、
有効範囲とは、どういう意味なのでしょうか?
有効範囲とは字のごとく、それが有効である範囲のことです。
つまり、それが使用できる範囲のことですね。
たとえば、
東京から大阪までの新幹線の切符を買ったとします。
この切符の有効範囲は、もちろん東京から大阪ですね。
それ以外の範囲ではこの切符は使えませんね。
これと同じように、
変数にもそれを使える範囲があるのです。
そして
変数の範囲は、その変数が宣言されている場所で変わる
ということを押さえておいてください。
次に、
有効範囲には応じて、変数を「ローカル変数」と「グローバル変数」に分けることができる
ということを知っておいてください。
では、今回は「ローカル変数」についてお話ししていきますね。
1: ローカル変数
変数が宣言される場所:関数の括弧{ }の中
有効範囲 :その変数が宣言された関数内
有効範囲が「その変数が宣言された関数内」とはどういうことでしょうか?
サンプルプログラムを用いて説明しますね。
#include <stdio.h>
void myFunc( void );
int main( void )
{
myFunc( );
return( 0 );
}
void myFunc( void )
{
int a;
a = 3;
printf(“a=%d¥n”, a);
}
実行結果:
a=3
このサンプルプログラムで、myFunc関数の括弧{ }の中で、int a; と変数を定義していますね。
だから、この関数はローカル変数と呼ばれるものです。
そして、
myFunc関数内でa = 3; と変数に値を入れたりして使うことが可能です。
なぜなら、このローカル変数の有効範囲は、その変数が宣言された関数内だからです。
では、
サンプルプログラムを少し変えてみましょう。
a = 3; とその変数を使う場所を、myFunc関数の外にしてみましょう。
#include <stdio.h>
void myFunc( void );
int main( void )
{
a = 3;
myFunc( );
return( 0 );
}
void myFunc( void )
{
int a;
printf(“a=%d¥n”, a);
}
どうなりましたか?
コンパイルをすると、以下のようなエラーが出現したと思います。
error: use of undeclared identifier 'a'
これを日本語に訳すと「エラー:不明瞭な識別名 ‘a’の使用」となります。
つまり、「’a’なんて知らないよ、何使ってるんだ?」と言われています。
何故このようなエラーが出現したのでしょうか?
もう、分かりますね?
そう、
変数aは、myFunc関数内で宣言したローカル変数です。そして、その有効範囲は「宣言された関数内」なわけです。
しかし、
このサンプルプログラムでは、宣言された関数外で a=3 と使用してしまいました。
つまり、ローカル変数の範囲外で使用してしまいまいした。
そのため、
コンピュータからすると「’a’なんて知らないよ、何使ってるんだ?」となってしまったということです。
以上、ローカル変数について今回は述べてきました。
まとめると、ローカル変数とは
変数が宣言される場所は、関数の括弧{ }内で、その変数の有効範囲(使える範囲)は、その変数が宣言された関数内のみということになります。
次回は、グローバル変数についてお話ししますね。
余談)
プログラムをする上で、英語は大事です。
何故かというと、コンパイルエラーが生じたとき英語でメッセージが出てきたりします。
また、プログラムをする上で、最新の技術動向等を知るには、やはり海外の文献等を調べることも多々出てきます。
その時に、英語が使える方がやはり便利だと思います。
英語が苦手と思われている方も、小さなことから少しずつ英語を勉強していってみてはどうでしょうか。
実はそう言う私も英語が得意ではありません(苦笑)。
そこで、英語のブログを自分自身で立ち上げ英語の勉強をしています。
そのブログでは、私は教える立場ではなくて、学ぶ立場のブログになっています。
学校で習ったような、英語の勉強の仕方はしたくないので、
今の私にできる英語の勉強で具体的な最初の一歩は何かなっと考えて、好き勝手にやっています(笑)。
もし興味ある方は、そちらのブログも覗いてみてくださいね。
URLはこちらです↓。
http://ameblo.jp/learn-english-word-withn/