ページ 11

関数ポインタについて

Posted: 2015年12月22日(火) 21:22
by ゆうな
参考書で関数ポインタの部分を見ていたのですがこのコードを関数ポインタ(*pM[num])();を使うとすっきりすると書いているのですが
そのあとの部分がなく具体的にはどこの部分を変えればいいのかわかりません。
何処を変えればいいのか教えてください。

コード:

#include<stdio.h>

void show0(void);
void show1(void);
void show2(void);

int main(void)
{
	void(*pM[3])(void);
	int num;

	pM[0] = show0;
	pM[1] = show1;
	pM[2] = show2;

	printf("どののりものを呼びますか?(0:車 1:レーシングカー 2;飛行機)\n");
	scanf("%d", &num);

	if (0 <= num&&num <= 2)
		(*pM[num])();

	return 0;
}

void show0(void)
{
	printf("車です。\n");
}
void show1(void)
{
	printf("レーシングカーです。\n");
}
void show2(void)
{
	printf("飛行機です。\n");
}

Re: 関数ポインタについて

Posted: 2015年12月22日(火) 22:03
by box
そのコードで十分できていると思いますが…。

コード:

#include <stdio.h>

typedef void (*pM)(void);

void show0(void)
{
    printf("車です。\n");
}

void show1(void)
{
    printf("レーシングカーです。\n");
}

void show2(void)
{
    printf("飛行機です。\n");
}

int main(void)
{
    pM p[] = { show0, show1, show2 };
    int num;

    do {
        printf("どののりものを呼びますか?(0:車 1:レーシングカー 2;飛行機)\n");
        scanf("%d", &num);
    } while (!(0 <= num && num <= 2));
    p[num]();
    return 0;
}

Re: 関数ポインタについて

Posted: 2015年12月23日(水) 20:06
by hide
関数ポインタを使うとswitch caseを使わずにこのようにかけるのだ的な意味で書かれているのでは