関数ポインター

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
gama
記事: 6
登録日時: 2年前

関数ポインター

#1

投稿記事 by gama » 2年前

コード:

#include<stdio.h>


void hello(void)
{
    printf("Hello/n");
}
int main(void)
{
    void (* pfunc)();

    pfunc = hello;
    printf("Helloのアドレス = %p", hello);
    printf("pfuncのアドレス = %p", *pfunc);

    pfunc();

    return 0;
}
このコードにtypedefの型定義を行いたいです。
typedefの使い方がいまいちわかってません
したいのは、helloか*pfuncを定義することは可能ですか?

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

Re: 関数ポインター

#2

投稿記事 by box » 2年前

ほんのちょっとしたサンプルコードです。

コード:

#include<stdio.h>

typedef void (*func)(void);

void hello(void)
{
    printf("Hello\n");
}

void bonjour(void)
{
    printf("Bonjour\n");
}

void gutentag(void)
{
    printf("Guten Tag\n");
}

int main(void)
{
    func f[] = { hello, bonjour, gutentag };
    int i;

    for (i = 0; i < sizeof(f) / sizeof(f[0]); i++) {
        printf("%p\n", f[i]);
        (*f[i])();
    }
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: 関数ポインター

#3

投稿記事 by box » 2年前

ほんのちょっとしたサンプルコードその2です。

コード:

#include<stdio.h>

typedef int (*keisan)(int, int);

int add(int a, int b)
{
    return a + b;
}

int sub(int a, int b)
{
    return a - b;
}

int mul(int a, int b)
{
    return a * b;
}

int div(int a, int b)
{
    return (b != 0) ? (a / b) : 0;
}

int main(void)
{
    keisan f[] = { add, sub, mul, div };
    int i;

    for (i = 0; i < sizeof(f) / sizeof(f[0]); i++) {
        printf("%p\n", f[i]);
        printf("%d\n", (*f[i])(10, 3));
    }
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

返信

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