関数ポインタについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ゆうな

関数ポインタについて

#1

投稿記事 by ゆうな » 9年前

参考書で関数ポインタの部分を見ていたのですがこのコードを関数ポインタ(*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");
}

box
記事: 2002
登録日時: 14年前

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

#2

投稿記事 by box » 9年前

そのコードで十分できていると思いますが…。

コード:

#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;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

hide

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

#3

投稿記事 by hide » 9年前

関数ポインタを使うとswitch caseを使わずにこのようにかけるのだ的な意味で書かれているのでは

閉鎖

“C言語何でも質問掲示板” へ戻る