C言語関係掲示板

過去ログ

No.1160 関数ポインタ

[戻る] [ホームページ]
No.15050

関数ポインタ
投稿者---ター(2004/06/29 18:23:11)


void (*const mcr_stn00[])(void)=
{
initial_process1,  initial_process1〜8は関数です。)
initial_process2,
initial_process3,
initial_process4,
};

void (*const mcr_stn01[])(void)=
{
initial_process5,
initial_process6,
initial_process7,
initial_process8,
};


void far *const total_stn[]=
{
mcr_stn00,
mcr_stn01,
};

void main(void)
{
void far *func_num;

func_num = total_stn[0];

,ローカルの変数に入れて、関数ポインタで実行しようとしても
なかなかできません。
どなたかご教授できないでしょうか?



No.15056

Re:関数ポインタ
投稿者---RAPT(2004/06/29 21:06:33)


型が違うから。

> void far *func_num;
これはただのポインタであって、関数ポインタではない。


で、呼び出し方法は?


No.15065

Re:関数ポインタ
投稿者---ター(2004/06/30 09:21:25)


>> void far *func_num;
>これはただのポインタであって、関数ポインタではない。
>> void far *func_num; これをいれたのは間違いでしたね。
呼び出し方法はテーブルからの関数ポインタです。



No.15057

Re:関数ポインタ
投稿者---YuO(2004/06/29 21:10:55)


【掲示板ご利用上の注意】をちゃんと読みましょう。
>※ソースの添付は「HTML変換ツール」で字下げ!
>※環境(OSとコンパイラ)や症状は具体的に詳しく!
の2点をちゃんと守ってください。
#特に,後者は回答ができるかどうかに大きく関わります。


>(1)をローカルの変数に入れて、関数ポインタで実行しようとしても
>なかなかできません。

なかなかできない,とは?
なかなかできないということは,結論としてはできているのですか?



No.15066

Re:関数ポインタ
投稿者---ター(2004/06/30 09:24:09)


>>(1)をローカルの変数に入れて、関数ポインタで実行しようとしても
>>なかなかできません。
>
>なかなかできない,とは?
>なかなかできないということは,結論としてはできているのですか?
できません。




No.15071

Re:関数ポインタ
投稿者---かずま(2004/06/30 11:30:42)


#include <stdio.h>

void initial_process1(void) { puts("initial_process1"); }
void initial_process2(void) { puts("initial_process2"); }
void initial_process3(void) { puts("initial_process3"); }
void initial_process4(void) { puts("initial_process4"); }
void initial_process5(void) { puts("initial_process5"); }
void initial_process6(void) { puts("initial_process6"); }
void initial_process7(void) { puts("initial_process7"); }
void initial_process8(void) { puts("initial_process8"); }

void (*const mcr_stn00[])(void) = {
    initial_process1,
    initial_process2,
    initial_process3,
    initial_process4,
};

void (*const mcr_stn01[])(void) = {
    initial_process5,
    initial_process6,
    initial_process7,
    initial_process8,
};

void (*const *const total_stn[])(void) = {
    mcr_stn00,
    mcr_stn01,
};

int main(void)
{
    void (*const *func_num)(void);
    int i;

    func_num = total_stn[0];
    for (i = 0; i < 4; i++) func_num[i]();

    func_num = total_stn[1];
    for (i = 0; i < 4; i++) func_num[i]();

    return 0;
}



No.15128

Re:関数ポインタ
投稿者---男山(2004/07/01 22:09:59)


関数の使い方、呼び出し方が分かりません。
教えて下さい。

void initial_process1(void)
void (*const mcr_stn00[])(void) = {
};
void (*const *const total_stn[])(void) = {
};

void (*const *func_num)(void);
func_num = total_stn[0];
for (i = 0; i < 4; i++) func_num[i]();


><pre>
#include <stdio.h>

void initial_process1(void) { puts("initial_process1"); }
void initial_process2(void) { puts("initial_process2"); }
void initial_process3(void) { puts("initial_process3"); }
void initial_process4(void) { puts("initial_process4"); }
void initial_process5(void) { puts("initial_process5"); }
void initial_process6(void) { puts("initial_process6"); }
void initial_process7(void) { puts("initial_process7"); }
void initial_process8(void) { puts("initial_process8"); }

void (*const mcr_stn00[])(void) = {
initial_process1,
initial_process2,
initial_process3,
initial_process4,
};

void (*const mcr_stn01[])(void) = {
initial_process5,
initial_process6,
initial_process7,
initial_process8,
};

void (*const *const total_stn[])(void) = {
mcr_stn00,
mcr_stn01,
};

int main(void)
{
void (*const *func_num)(void);
int i;

func_num = total_stn[0];
for (i = 0; i < 4; i++) func_num[i]();

func_num = total_stn[1];
for (i = 0; i < 4; i++) func_num[i]();

return 0;
}
</pre>