【C言語】ポインタ(4)Cの規格書でどう記載されているか

どうも。gochaです。

なぜ、ポインタはプロが書いている本ですら、間違っている、もしくは曖昧な記述が頻出してしまうのでしょうか?

そもそもポインタはどのように規格書で定義されているのか見てみましょう。

例えば、下記のURLで、Cの規格書を読むことができます。

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf

ここで「pointer」でファイルを検索してみると、おもしろいことが分かります。

  1. 637個も該当箇所がある
  2. Pointerとしての定義を記載している部分が明確ではない。

こういうときは逆順で検索して、索引から調べるのがオススメです。3回程逆順に検索すると、page 547の左側の列に

pointer, 6.2.5

記載されている箇所が見つかると思います。

のSection 6.2.5 page 48(page 番号は36)が一番初めに、pointer単独としての記述されている箇所になります。

— A pointer type may be derived from a function type, an object type, or an incomplete type, called the referenced type.

A pointer type describes an object whose value provides a reference to an entity of the referenced type.

A pointer type derived from the referenced type T is sometimes called ‘‘pointer to T’’.

The construction of a pointer type from a referenced type is called ‘‘pointer type derivation’’.

These methods of constructing derived types can be applied recursively.

参照:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf#page=48

日本語訳すると下記のような感じでしょうか。

- ポインタ型は、被参照型と呼ばれるファンクション型、オブジェクト型、またはインコンプリート型 から派生され得る。

ポインタ型はオブジェクトの特徴を説明し、このオブジェクトの値は、被参照型の実体への参照となる。

被参照型Tから派生されるポインタ型は、時々、‘‘Tへのポインタ”と呼ばれる。

被参照型からポインタ型を構築することは、‘‘ポインタ型の派生”と呼ばれる。

‘‘ポインタ型の派生”は再帰的に適用することができる。

意味分かんないですよね。正直、私は初めて読んだとき、意味が分かりませんでした。

なので、次の記事に少し整理して説明します。

今回はここまで。