配列とポインタ
「C++プログラミング言語の歴史と特徴」連載第12回目の今回も前回に引き続き次の公開論文を精読していきます。
第1回連載資料論文
今回は、「3.1 Arrays and Pointers」節の意味を考えます。この節のタイトルは、配列とポインタ、と翻訳できます。本連載をこれまで辛抱強く読まれてきた皆さんは、"これでやっと..."、とつぶやかれているのではないでしょうか。どこかで一度は目にしたことのあるプログラミング用語がやっとここで2つ登場したからです。
「配列とポインタ」は、C言語をマスタする際の代表的な難所といわれています。皆さん、配列とポインタがなぜ難所なのかお分かりになりますか?その理由は簡単です。配列とポインタはプログラミング上の重要概念ですが、その概念の理解にはコンピュータの内部構造に関する知識が要求されるからです。プログラミング言語を学び始めた人や平均的なアプリケーション開発者は、プログラミング言語はおろか、コンピュータの中身などを知っていないのが普通です。筆者から言わせれば、プログラミング言語学習者に対して、配列とポインタをしっかり習得してほしい!、と望むこと自体、理解しがたいことです。経験の浅いプログラマに配列とポインタをマスタしてほしいと望むのであれば、しっかりとした社内教育を行うべきです。それでは、Bjarne Stroustrup氏の配列とポインタに関する説明を読んでみましょう。
Stroustrup氏は、配列とポインタについて、次のような文を用意しています。
・A C array is simply a sequence of memory locations.
・A C pointer is a variable that can hold an address of a memory location.
この2つの文を目にして、皆さんはまずどのようなことをお感じになりますか?はっきり言って、通り一遍の説明です。なぜでしょう?それは、この2つの概念はCからの"借り物"だからです。Stroustrup氏が独自に考えたものではなく、Cプログラマへの配慮とC文化の継承のために、C++の一部として採用したものにすぎないからです。第3.1節の最後には、次のような文が用意されています。
The C++ standard library provides more general versions of functions such as find();
この文はどのようなことを述べようとしているのかといえば、配列とポインタをC的に理解することは歓迎しない、ということなのです。少なくとも、これからC++を学ぼうとしている人は、C的なプログラミング方法や発想を採用すべきではない、ということなのです。たとえば、次のコードを見てみましょう。
int v[10];
int* p;
p = &v[7];
これらのコードを冷静に眺めてください。これらのコードは私たちの想像力や喜びなどの表現と関係がありますか?筆者は、まったく関係ない、と思います。このため、筆者は、プログラマという職業に就き、必要になった時点(たとえば、特許レベルのアルゴリズム開発や特殊なライブラリ開発に従事するような場面)で学習すればよいと考えている一人です。平均的なアプリケーション開発者は、このようなコードを見ない方がよいとさえ思っています。
第3.1節には、サンプルコードが用意されていますから、筆者の感想などを斟酌された上で、ご自分の開発環境を起動し、応用プログラムを作成してみるとよいでしょう(例)。また、今回の記事の分量はかなり小さめになっていますから、これまでの連載内容を読み返してみるのもよいと思います。
前へ |
次へ
Copyright©豊田孝 2004-
2008
本日は2008-12-04です。