2005年度の授業は終りました。 この授業のページは参照用の資料として保存しているものです。最新の情報・資料は 江上の授業ページで。 |
外部変数(グローバル変数) |
スコープ規則(ブロック化)
{ ・・・ } の対応によって、プログラムをブロック化できる。
スコープ (または通用範囲)の規則覗き穴・・・穴を通して何かが見える・・・それ以外は見えない
スコープ規則により
ブロック内部の変数は見えない
↑
---------------------------ブロック始まり → { +→
|
|[ブロック内部の変数宣言部]
|
|
|
|
+→[ブロック本体]
C言語のプログラム
この領域でのみ上記の変数宣言部で準備した変数が使用できる
ブロック終わり → } ---------------------------
↓
スコープ規則により
ブロック内部の変数は見えない
例)
関数内部で準備・宣言した変数は他の関数(たとえば main 関数)から参照・代入できないたとえば、関数を用いた以下のプログラミングは間違いである
#include <stdio.h> main( )
{
int x,y ;x = 10;
y = 20;sub();
printf("%d", z); <-- 変数 z は参照できない
}sub()
{
int z;z = x + y; <-- 変数 x,y は参照できない
}
正しくは以下のように引数・戻り値を用いて参照する必要がある
#include <stdio.h> main( )
{
int x,y ;x = 10;
y = 20;printf("%d", sub(x,y) );
}int sub(int x, int y)
{
int z;z = x + y;
return z;
}
変数には大きく2つの種類がある外部変数、 または global (グローバル)変数
局所変数、 または local (ローカル)変数
- プログラム全体で使える。
- ある部分(ブロック内)でのみ使用可能。
- 関数型言語の特徴でもある。
- ブロック内部で宣言された変数は(存在如何にかかわらず)外部からは見えない(読み書きできない)
+
| int global ; ← global 変数 | | main( ) | + { | | int local ; ← local 変数 | | | | | | + { | | | int very_local ; ← local 変数 | | | | | | | | + } | | | + } + |
スコープの規則によると・・・
int global ;
main( )
int very_local ;
|
入れ子になったブロックに同じ名前の変数があった場合
main( )
{ int i ; ← 外側のブロックの変数 "i"
int i ; ← 内側のブロックの変数 "i" 外側のブロックの変数 "i" とは記憶される場所が違っている よって、全く別の変数である
} |