ページ 11

関数ポインター

Posted: 2022年2月28日(月) 22:50
by gama

コード:

#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を定義することは可能ですか?

Re: 関数ポインター

Posted: 2022年3月01日(火) 01:34
by box
ほんのちょっとしたサンプルコードです。

コード:

#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;
}

Re: 関数ポインター

Posted: 2022年3月01日(火) 01:45
by box
ほんのちょっとしたサンプルコードその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;
}