ホーム » スタッフ » 斉藤徹 » 変数と関数のデータ受け渡し

2010年4月
« 3月   5月 »
 123
45678910
11121314151617
18192021222324
252627282930  

最近の投稿(電子情報)

アーカイブ

カテゴリー

変数と関数のデータ受け渡し

先週の制御構造の話の中で、説明できなかった、break , continue , switch-case 文について 解説を行う。break,continue では、forループのとび先などを交えて話した。

次に、変数の解説ということで、大域変数が原因で変になるプログラムの例として、 下記のようなネタを紹介しながら、大域変数が問題視される事例を紹介。

int i ;
void foo() {
for( i = 0 ; i < 2 ; i++ )
printf( "A" ) ;
}
void main() {
for( i = 0 ; i < 2 ; i++ )
foo() ;
}

この例を受けて、局所変数の重要性を説明し、 大域変数の寿命(起動から終了まで)、スコープ(プログラム全域)の話と、 局所変数の寿命(通常、ブロック突入から抜けるまで)、スコープ(該当ブロックの範囲内)といった 解説を行う。さらに、局所変数で static 宣言した場合の説明を行う。

次に、関数の引数の取り扱いということで、実引数・仮引数の値で一般的には、 『値渡し(Call by Value)』の原則を話す。この値渡しだけを使っていれば、 関数実行による呼び出し側への影響(副作用:side effect)を最小限にできることを説明する。 しかしながら、「大域変数は極力使いたくない」、「関数で共通に使うデータの受け渡し」 といった場合には、時として副作用も必要ということで、 ポインタを経由した書き換え『ポインタ渡し(Call by Pointer)』の話を説明する。

時間が中途半端に残ってしまったので、 C言語が、B言語→C言語→C++→Java/C#と発展していった経緯を紹介する。 特に、C++は、"Better C"(よりよいC言語)としても使われており、 今後の授業でも便利なC++の機能を織り交ぜて話をすることを前置きしておく。

話のネタで、C++の由来やC#の由来を雑談で話した。改めて、WikipediaのC#を見ると、 C#は「音楽の半音上げる」の意味や、「#は、++(改行)++の4つの+」の意味… とのネタが記載されている。ふーん….