C++トリビアルメモ(ポインタの参照)

平成20年ってほんと?ありえなくない?

VC++でポインタの参照を使ってみました。どういうことなのかよく分からないけど動いたから正しいに違いない。
コンパイラが神様です。
C言語の場合、引数で渡された変数に関数内で領域を割り当てる場合は普通(?)二重ポインタにする。私の場合。


void foo(char **bar) {
   *bar = (char *)malloc(sizeof(char)*10);
}

int main(int argc, char **argv) {
   char *bar;

   foo(&bar);

   return 0;
}

そもそもこれがあってるのかという話もありますが、


void foo(char *bar) {
   bar = (char *)malloc(sizeof(char)*10);
}

ってやるとコンパイラに怒られるんだもん。
C++だとこんな感じ?


class Hoge {
public:
   Hoge(){}
   ~Hoge(){}

   int a;
};

void hogeUser(Hoge **hoge) {
   *hoge = new Hoge();
}

int main(int argc, char **argv) {
   Hoge *hoge;

   hogeUser(&hoge);

   return 0;
}

しかしこれ、以下のように書けた。


void hogeUser(Hoge *(&hoge)) {
   hoge = new Hoge();
}

int main(int argc, char **argv) {
   Hoge *hoge;

   hogeUser(hoge);

   return 0;
}

でもひょっとしたら動いてないかもしれない。デバッグ中に奇妙に勝手に終了することがあった(アクセス違反)。
関係ないところだったけど、これが影響しているのかもしれない。

「あほやん」と言う人は教えてください。

以上

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: C++, Tips パーマリンク

C++トリビアルメモ(ポインタの参照) への6件のフィードバック

  1. noname のコメント:

    >Hoge *(&hoge))
    Hoge*& hoge
    括弧いらない。

    int x = 10;
    int* px = &x;
    int*& rpx = px;

    std::cout

  2. コスミー のコメント:

    なるほど、そっちにくっつければいらないのか。
    コンパイラに怒られないようにしただけなんです。
    というか、括弧がないほうがいいんでしょうか。

  3. noname のコメント:

    Hoge * & hoge とかでもいいはず。
    括弧はあってもなくてもいい。

  4. http://www.giovannicarlone.it/remen/43.html【jg】REBECCA MINKOFF レベッカミンコフ バッグ チェーンバッグ キルティング 本革 ミニ 《 Mini Quilted Affair 》大人の為のチェーンバッグ? 本革 と ゴールド チェーン がラグジュアリー な仕上がり:ジャングル ジャングル

  5. http://netkal.org/rebeccaminkoff/114.htmlレベッカミンコフ バッグ REBECCA MINKOFF HT25IFCX01 272 FASHION CLASSICS MINI MAC ショルダーバッグ APRICOT/LIGHT GOLD【new0624】:1&one

コメントを残す

メールアドレスが公開されることはありません。