- ベストアンサー
ダブルポインタについて
char **abc; のような定義をおこなったとき、abcをダブルポインタと呼ぶようですが、 これは、正式なC言語の規約上の用語なのでしょうか? それともインターンネット上で使用されている俗語なのでしょうか? もし、正式な用語だとすると、 char ***xyz; の定義の場合は、トリプルポインタと呼ぶのでしょうか? ご存知のかたがおりましたら、教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
少なくとも,標準Cの用語にはないはずです。 ISO/IEC 9899:1999 (以下 IS) のIndexのdoubleから始まる単語は, > double _Complex type, 6.2.5 > double _Complex type conversion, 6.3.1.6, 6.3.1.7, 6.3.1.8 > double _Imaginary type, G.2 > double type, 6.2.5, 6.4.4.2, 6.7.2, 7.19.6.2, 7.24.2.2, F.2 > double type conversion, 6.3.1.4, 6.3.1.5, 6.3.1.7, 6.3.1.8 > double-precision arithmetic, 5.1.2.3 > double-quote escape sequence (\"), 6.4.4.4, 6.4.5, 6.10.9 > double_t type, 7.12, J.5.6 だけです。 関連しそうな用語としては, IS 7.24.6.4 Restartable multibyte/wide string conversion functions の第2段落に, > Also unlike their corresponding functions, the conversion source parameter, src, has a pointer-to-pointer type. という文があります。 pointer-to-pointer type,「ポインタへのポインタ型」とでも訳すのがよいでしょうか。 元々,ポインタ型は何らかの「オブジェクト型/不完全型/関数型」の派生型として定義され, ポインタ型自体はオブジェクト型で,型の派生は再帰的に行えます。 ref) IS 6.2.5 Types ¶20 > Apointer 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. > These methods of constructing derived types can be applied recursively. 標準としてはこの「派生型の構築手法は再帰的に適用できる」という一文がchar **などの根拠であり,名前を付けていないことになります。 なお,この「派生」はC++におけるクラスの派生とは全く別の概念である事に注意して下さい。 私は先のpointer to pointer typeのような表現を使っています。 ポインタへのポインタ,関数へのポインタの配列へのポインタ,というような形になります。 # 書籍"プログラム言語 C"で型を読み解くプログラムがあり,そのプログラムの出力を日本語に言い直したものが原形
その他の回答 (3)
- kmee
- ベストアンサー率55% (1857/3366)
俗語でしょうね。 C言語としては char** は (char のポインタ)のポインタ char*** は ((char のポインタ)のポインタ)のポインタ であって、 ** とか *** とか言う演算子や型の指定があるわけではないのですから。
お礼
回答ありがとうございます。 私も個人的には、俗語と考えていましたが、 もし、正式な名称であるならば、その根拠を知りたいと思い質問した次第です。
- lv4u
- ベストアンサー率27% (1862/6715)
ダブルポインタなんて単語はC言語、C++の本では、見たことありません。 「ポインタのポインタ」という表現は見ましたけどね。 また、私も、No.1さんのように、double *を思い浮かべます。
お礼
回答ありがとうございます。 私もC言語の本を読んでダブルポインタという言葉を見たことはありませんでしたが、 ここ数年の間に、「ダブルポインタ」をインターネット上で見かけるようになりました。 私の前の質問のページでも「ダブルポインタ」が使われていたので、気になり質問した次第です。 http://oshiete.goo.ne.jp/qa/7926287.html
- wormhole
- ベストアンサー率28% (1626/5665)
少なくとも私はダブルポインタなる用語は知りません。 ダブルポインタだとdouble *の方を思い浮かべる方の方が多いんじゃないかなぁ。
お礼
回答ありがとうございます。 インターネットで「ダブルポインタ」をキーワードとして検索すると以下の結果が表示されます。 ですので、インターネット上では、「ダブルポインタ」という言葉がが使用されているのは間違いないです。 (正式な言葉か否かは別ですが) http://search.yahoo.co.jp/search?p=%E3%83%80%E3%83%96%E3%83%AB%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=
お礼
出典まで提示して頂き、ありがとうございました。 ダブルポインタが正式な名称ではないことの確認がとれて、安心しました。 少なくとも、今後、C言語に関する報告書もしくは文書を作成する場合、ダブルポインタは使用しないようにしたいと思います。