1. ホーム
  2. c++

[解決済み] C++の**とは何ですか?

2022-02-24 05:48:54

質問

いくつかのコードや、コンパイラから生成されたエラーに、''S''マークがあるのを見かけました。 ** というトークンを変数の前に置いています(例: **variablename unreferenced-- とか、正確には思い出せません)。 これはポインタに関連していることは間違いないのですが、推測すると、2回参照解除をしようとしているように見えます。 ' ** はかなりググれない。 誰か良いウェブサイトやドキュメントを紹介してくれる人、またはここで説明してくれる人はいませんか?

ありがとうございます。

素晴らしい回答です。 補足させていただくと、ポインタへのポインタがあると便利な場面はどんなところでしょうか? 元のポインタへのさらに別のポインタを作成するのではなく、元のポインタを使用するだけではいけないのでしょうか?

どのように解決するのですか?

** は実際にはポインタからポインタへのポインタ(宣言時)だけでなく、デリファレンスからデリファレンス(文中)でもあります。

参照の&表記を持たないC言語では、ポインタ型である戻り値を更新する場合などによく使われる。

int alloc_foo(struct foo **foo_ret)
{
    *foo_ret = malloc(sizeof(struct foo));
    return 1; /* to indicate success; return value in foo_ret */
}