バリケンのRuby日記 RSSフィード

2007-10-12

[] これまでやった実験のまとめ  これまでやった実験のまとめ - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  これまでやった実験のまとめ - バリケンのRuby日記  これまでやった実験のまとめ - バリケンのRuby日記 のブックマークコメント

今までいろいろと試してみたけど、

http://rubyist.g.hatena.ne.jp/muscovyduck/20070930/p1

http://rubyist.g.hatena.ne.jp/muscovyduck/20071001/p1

http://rubyist.g.hatena.ne.jp/muscovyduck/20071002/p1

http://rubyist.g.hatena.ne.jp/muscovyduck/20071003/p1

http://rubyist.g.hatena.ne.jp/muscovyduck/20071008/p1

http://rubyist.g.hatena.ne.jp/muscovyduck/20071009/p1

http://rubyist.g.hatena.ne.jp/muscovyduck/20071011/p1

ここまででC言語に関してわかったことをまとめてみるよ。

変数名も関数名も、単なる「メモリアドレスへのラベル」に過ぎない

変数は「値を入れる箱」じゃなくって、「値となるデータビット列)の先頭メモリアドレス」にラベル(別名)を付けているだけだよ。

同様に関数名も「機械語(として解釈されるビット列)の先頭メモリアドレス」にラベル(別名)を付けているだけだよ。

だからそのアドレスの先にあるビット列をどう解釈するかを指定すること(つまり「型を指定する」こと)で、整数になったり文字列になったり関数になったり‥‥といったことができたんだね。

プログラムを実行すると、main関数として呼び出す

そして、C言語では「mainというラベルを付けたメモリアドレス」の先には機械語(として解釈されるビット列)があるものとみなして、そこからプログラムを開始しようとするんだね。

だから「int main = 195;」とすると、195は16進数の「c3」(x86CPUでは「ret」)なので、何もせずに関数を終了させるような動作をしたんだね。

この「メモリアドレスへのラベルと、その先のビット列」という考え方は、C言語を学ぶ上で重要概念なんじゃないかなあ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20071012