概ね方位不定だが多分割と偏っている
スポンサーサイト
--年--月--日 (--) | 編集 |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


C 局所的変数
2006年08月19日 (土) | 編集 |
どうも盆過ぎてから破滅的に暑いな。


Cの変数としての特徴らしい。
つっても俺はCしか知らんので他の言語と比較されても分からんのだが。

Cだとメインプログラムとサブルーチンで同じ名前の変数を使っていても、その値が適応されるのはその関数の中だけなんだが、BASICではメインだろうがサブだろうが共通に使われているんだそうだ。こういう形式のBASICの変数を大域的変数(グローバル変数)と呼び、Cの形式の変数を局所的変数(ローカル変数)と呼ぶ。

実際グローバル変数だとどうなるのかというと、例えばメインルーチンで使われているループ変数iをサブルーチンで弄くってしまった場合、メインでのループの値を変更してしまったことになり、正常な動作をしなくなったりするのだそうだ。
Cだと同じ名前でもメインとサブで別物扱いな為、そういうことはないらしい。

だから何だって気もするが、とにかくCの変数の独立性は重要なのだということだ。
実際見てみよう。

サブルーチンでループ変数iを出力してみる

void func(void)
{
 int i;
 for(i=0;i<3;i++)
  printf("関数funcの変数iは%dだぜ\n",i);
}


メインでもループ変数iを出力したり、関数funcを呼び出したりする

void main(void)
{
 int i;
 for(i=0;i<3;i++){
  printf("mainの変数iは%dだぜ\n",i);
  func();
}


voidなのは戻り値が無いから…かね?
mainでfunc()なのは関数funcに渡す引数が無いかららしいが。

local_function_test.jpglocal_function_test2.jpg
こんな感じ

メインルーチンでi=0の時でもサブルーチンの方は問題なくi=0,1,2と推移していく。
これがCにおける変数の独立性というものらしいな。
もちっと例を見てみよう。
Cにはブロックという概念があり、

local_function_test3.jpglocal_function_test4.jpg

こんなのも成り立つ。{ }内で宣言、初期化された変数は同じ名前であっても{ }外では適応されないってことやね。

まとめよう。

Cではサブルーチンとメインルーチンで変数は別物扱い
{ }内で宣言された変数は{ }内でしか適応されない
これは局所的変数(ローカル変数)と呼ばれる


以上。
今回は特に難しくもないな。応用次第でどうなるかは分からんけど。
スポンサーサイト

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。