C言語 - ポインタ - ダブルポインタのメンバ変数の記述

 クラウディア
1. 概要
2. コーディング

1. 概要

 ダブル以上のポインタは、慎重に使わないと、罠がいっぱいです。

2. コーディング

 ついうっかり

#include <stdio.h>
#include <stdlib.h>

struct stHogehoge
{
    int nHogehoge;
    int nFugafuga;
};

void sub01(stHogehoge** phoge);

int main(int argc, char* argv[])
{
    stHogehoge* phoge = NULL;

    sub01(&phoge);

    return 0;
}

void sub01(stHogehoge** phoge)
{
    *phoge = (stHogehoge*)malloc(sizeof(stHogehoge));

    *phoge->nHogehoge = 1;
    *phoge->nFugafuga = 2;
}
 と書いちゃいそうになるのですが  これコンパイルするとエラーになります。

> clang ソースファイル名.cpp
test01.cpp:25:8: error: member reference base type 'stHogehoge *' is not a structure or union
        *phoge->nHogehoge = 1;
         ~~~~~^ ~~~~~~~~~
test01.cpp:26:8: error: member reference base type 'stHogehoge *' is not a structure or union
        *phoge->nFugafuga = 2;
         ~~~~~^ ~~~~~~~~~
2 errors generated.
 正しくは

    (*phoge)->nHogehoge = 1;
    (*phoge)->nFugafuga = 2;
 と「*」(アスタリスク)を含めて変数名をカッコでくくって、以降に「->」を記述します。