注目の書籍

好評発売中!

基礎からきちんと知りたい人のC#プログラミングの入門書

楽しく役立つプログラ ミングをこの一冊でマ スター!付録DVD-ROM ですぐに始められる!

ソフト開発

C言語で始めるプログラミングの基礎

日経ソフトウエア

第12回 関数にポインタでアクセスする

2010/03/24
金宏和實
出典:日経ソフトウエア 2004年6月号  pp.116-122
(記事は執筆時の情報に基づいており、現在では異なる場合があります)

 現在のコンピュータは,「フォン・ノイマン*1型のコンピュータ」といわれています。フォン・ノイマン型コンピュータの特徴は,ごく当たり前のことに思えますが,プログラムを内部のメモリーにデータとして記憶させることです。これは,プログラムもデータの一部に過ぎないことを意味しています。コンピュータのハードウエア側からみれば,プログラムとデータに本質的な違いはなく,どちらも2進数の連続した値にほかならないのです。

 フォン・ノイマンがこのプログラム内蔵方式を提唱したのは,太平洋戦争が終結した年,1945年のことです。それから60年近く経つのに,コンピュータの基本的な仕組みそのものはたいして変わっていません。

 それ以前には,フォン・ノイマン型ではないコンピュータがありました。世界最初のコンピュータといわれるENIAC*2では,プログラムは配線で実現されていました。テキスト・ファイルとして書き込んだソースコードではなく,本当にコード(配線)を人手で,端子から端子へ何本もつなぐことで実現されていました。

 さらにそれ以前はというと,パスカル*3の歯車計算機,「コンピュータの父」と呼ばれるバッベジ*4の階差機関や解析機関などのような,機械仕掛けの仕組みになってしまいます。

 少し脱線しすぎました。現在のコンピュータでは,メモリーのどこかのアドレスにプログラムの変数が記憶されます。同様に,プログラム本体もメモリーにロードされてから,実行されます。プログラムの実体をなす関数も,メモリーのどこかのアドレスに記録されているわけです。

 皆さんはすでに,ポインタを使ってアドレスで変数の値にアクセスすることをご存じでしょう。これと同様に,関数へもポインタを介してアクセスできます。変数を読み込むことと,関数を読み込むことはコンピュータのハードウエアからみれば,大きな違いはありません。

 今回のテーマは,この「関数にポインタを使ってアドレスでアクセスする」ことです。メモリーの中を,いかに具体的にイメージしてもらうかに,こだわってきた本連載ですから,最終回もメモリーにピタッと張りつくような解説をしたいと思います。前置きが長くなりすぎましたね。それでは始めましょう。

>>アドレス空間はどのように区切られているのか
次ページ以降はITpro会員(無料)の方のみお読みいただけます。
会員の方は、 ログインしてご覧ください。
まだ会員でない方は、ぜひ登録(無料)していただき、ITproの豊富なコンテンツをご覧ください。

この記事に対するfacebookコメント

nikkeibpITpro

読みましたか? 〜 未読記事をご紹介