掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29031

配列関数のポインタの変数
投稿者---yaruzo(2006/11/24 12:44:36)


はじめまして、C言語の関数のポインタの変数の扱いについて
お尋ねします。

配列関数ポインタ変数を利用したい。
pは、実際に関数のアドレスが格納されている変数。
ppは、pのポインタ。(このように表現していいかわかりませんが)

--------モジュールA----------
void (*p[2])(int);
void func1( int x ){ ... }
void func2( int x ){ ... }
void InitFunc( void ){
p[0]=func1;
p[0]=func2;
SetPointer( p );
}

--------モジュールB----------
void (**pp[])(int); <- どのように記述すればいいかわからない!!!
// 外部で登録された、配列関数を記録しておく
void SetPointer( (*p[])(int) ){
pp=p; <-エラーとなる
}
// 現在記録している、配列関数を実行する。
void RunFunc( int No, int v ){
pp[No](v); // 関数が実行される。
}

以上よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:配列関数のポインタの変数 29033 かずま 2006/11/24 13:14:05


No.29033

Re:配列関数のポインタの変数
投稿者---かずま(2006/11/24 13:14:05)


#include <stdio.h>

void SetPointer(void (*p[])(int));

static void (*p[2])(int);

static void func1(int x) { printf("func1(%d)\n", x); }
static void func2(int x) { printf("func2(%d)\n", x); }

void InitFunc(void) { p[0] = func1; p[1] = func2; SetPointer(p); }

//--------------------------------------------------------------------

#include <stdio.h>

void (**pp)(int);

void SetPointer(void (*p[])(int)) { pp = p; }
void RunFunc(int No, int v) { pp[No](v); }

int main(void) { InitFunc(); RunFunc(0, 35); RunFunc(1, 27); return 0; }



この投稿にコメントする

削除パスワード

No.29034

Re:配列関数のポインタの変数
投稿者---かずま(2006/11/24 13:20:14)


訂正。モジュールB に次の宣言を追加したほうがよいでしょう。
void InitFunc(void);



この投稿にコメントする

削除パスワード

No.29040

Re:配列関数のポインタの変数
投稿者---yaruzo(2006/11/24 14:27:09)


かずま 様、どうもありがとうございました。
3日間のもやもやがなくなり、すっきりしました。
またよろしくお願いします。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧