|
> 関数ポインタの配列の方について、typedefありの宣言とtypedefなしの宣言
> での使い方について教えてください。
#include <stdio.h>
void play(void) { printf("play\n"); }
void pause(void) { printf("pause\n"); }
void stop(void) { printf("stop\n"); }
void (*func[3])(void) = { play, pause, stop };
int main()
{
int i;
for (i = 0; i < 3; i++)
func[i]();
return 0;
}
func は、関数へのポインタの配列です。typedef は使っていません。
関数だけを typedef すると、
typedef void Func(void);
Func *func[3] = { play, pause, stop };
ポインタだけを typedef すると、
typedef void (*FuncPtr)(void);
FuncPtr func[3] = { play, pause, stop };
関数もポインタも typedef すると、
typedef void Func(void);
typedef Func *FuncPtr;
FuncPtr func[3] = { play, pause, stop };
もちろん、配列を typedef できますが、おすすめしません。
typedef void Func(void);
typedef Func *FuncPtr;
typedef FuncPtr FuncPtrArray[3];
FuncPtrArray func = { play, pause, stop };
|