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

 
3.1 概要
3.2 コーディング

3.1 概要

追而書

3.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;
 と *(アスタ)を含めて変数名をカッコでくくって以降に -> を記述します。