”本気で”エンジニアを目指すなら『TECH BOOST』キャリアから逆算された講座内容で、あなたの未来をサポートします!

【C言語超入門(第33回)】ローカル変数とグローバル変数の違いを知ろう

Pocket

C言語の変数は、局所変数(ローカル変数)と、広域変数(グローバル変数)に大分類することができます。

ローカル変数とグローバル変数の違いを一言で言うならば、変数の適用範囲(スコープ)が違う、ということです。

そこで今回のC言語超入門では、変数のスコープが異なるローカル変数とグローバル変数についてご説明いたします。

変数のスコープとは

C言語の変数は、変数を定義した場所によって、その変数のスコープが決まります。

例えば、関数の中で変数を定義した場合、その変数はローカル変数といい、変数を定義した関数の中だけで参照することができます。

これに対して、関数の外で変数を定義した場合は、グローバル変数といます。

グローバル変数の適用範囲は、そのプログラム全体が対象になり、どの関数からでも参照することができます。

・ ローカル変数 ・・・ 関数内で定義され、その関数内のみ参照可
・ グローバル変数 ・・・ 関数外で定義され、どの関数からでも参照可

サンプルプログラムを使った変数のスコープの解説

サンプルプログラムを見ながら、変数のスコープを解説していきます。

変数gはグローバル変数

まずプログラム1の冒頭で、変数gを宣言しています。

変数gは関数の外側で宣言をしているためグローバル変数となり、どの関数からでも使用することができます。

プログラム1では、main関数とfx_sample関数の両方で、変数gを利用しています。

main関数、fx_sample関数のどちらでも、変数gを宣言していないところがポイントです。

変数dataはローカル変数

一方で、main関数の中では、変数dataを宣言しています。

関数内で宣言された変数dataはローカル変数になるため、main関数の中でしか使用することができません。

ですから、変数dataの値をfx_sample関数で使用したい場合は、fx_sample変数に、変数dataの値を渡してあげる必要があります。

もし変数dataをfx_sample関数内で参照しようとしますと、コンパイルエラーになってしまいます。(プログラム2)

 

ローカル変数はお互いに干渉しない

ローカル変数の特徴は、「変数を定義した関数の中でのみ使用できる」ことにありますが、
これはつまり、他の関数内で定義されている同名の変数とは無関係である、という事です。

例えば、プログラム1では、main関数とfx_sample関数で、それぞれ変数ansを利用していますね。

fx_sample関数内で変数ansに値を代入していますが、
プログラム1の実行結果を見ますと、main関数内の変数ansの値は影響を受けていません。

つまり、それぞれの変数ansは、お互いが干渉せず独立した存在であることがわかります。

これがローカル変数の特徴です。

プログラムの規模がどれだけ大きくなったとしても、
変数名を命名するときに、「この変数名は、もうどこかで使っているかな」と心配する必要がない、ということです。

まとめ

さて、ローカル変数とグローバル変数の違いについて、なんとなくご理解いただけましたでしょうか。

最後にもう一度、ローカル変数とグローバル変数のポイントをまとめておきます。

・ 関数の外で宣言された変数はグローバル変数になり、プログラム内のどこからでも参照できる
・ 関数の中で宣言された変数はローカル変数になり、変数を宣言した関数の中からのみ参照できる
・ ローカル変数は関数内でのみ有効なため、他の関数内に同名の変数があっても干渉しない

ステップ・バイ・ステップ。焦らず一歩ずつ進んでいきましょう。

投稿者:プロナビ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

プログラミングで挫折しそうなら、現役エンジニアにマンツーマンで相談してみませんか?オンラインのプログラミングスクール「TechAcademy」のメンターが対応。

この記事が気に入ったら
いいね!しよう

プロナビの最新情報をお届けします

あわせて読みたい

関連記事

ページ上部へ戻る