C言語関係掲示板

過去ログ

No.365.関数ポインタの配列の使い方

[戻る] [ホームページ]


No.2410

関数ポインタの配列の使い方について
投稿者---はじめ(2002/08/17 20:22:46)


関数ポインタの配列の方について、typedefありの宣言とtypedefなしの宣言
での使い方について教えてください。


No.2418

Re:関数ポインタの配列の使い方について
投稿者---かずま(2002/08/19 01:20:13)


> 関数ポインタの配列の方について、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 };


No.2429

Re:関数ポインタの配列の使い方について
投稿者---はじめ(2002/08/20 02:25:30)


>> 関数ポインタの配列の方について、typedefありの宣言とtypedefなしの宣言
>> での使い方について教えてください。

説明不足ですみません。
関数のポインタの型を定義をtypedefでするかしないかということです。
typedefで宣言しているのとしていないので違い、メリットはなんですか。

>ポインタだけを typedef すると、
>typedef void (*FuncPtr)(void);
>FuncPtr func[3] = { play, pause, stop };

func[]の関数が、FuncPtrの型を持ち、()を付けて呼び出せば関数を
呼ぶことができますが、分かりやすくしているだけですか。


普通、
typedef  unsigned char   UCHAR;
UCHAR str[10];
として分かりやくしますが、このような場合と同じなのでしょうか。