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