前回
参考ページ
モノづくりC言語塾 C言語 関数ポインタ【ポインタを使って関数を呼ぶ仕組み解説】
準備
今回はオンラインコンパイラを使用します。
オンラインコンパイラ
ソースコード
sample.c
#include <stdio.h>
//HELLO_VARIABLE型を定義する
typedef struct{
long i;
double d;
}HELLO_VARIABLE;
//関数fを代入することを想定して、関数ポインタfupo型を定義する
typedef HELLO_VARIABLE* (*fupo)(HELLO_VARIABLE*);
//関数fを代入することを想定して、fupo型の変数uを構造体HELLO型の内に定義する
typedef struct {
HELLO_VARIABLE j;
fupo u;
}HELLO;
HELLO_VARIABLE* f(HELLO_VARIABLE* v){
//引数v->iを表示
printf("_%ld_",v->i);
//引数v->iに1を加算
v->i++;
if(v->i>10){
//引数iが10より上になったらHELLO_VARIABLEポインタ型vを返す
return v;
}
else{
//関数fを再帰呼び出し
v=f(v);
}
//HELLO_VARIABLEポインタ型vを返す
return v;
}
int main() {
//HELLO型の変数lを宣言する
HELLO l;
//変数l.j.iに0を入れる
l.j.i=0;
//変数l.j.d=1.5を入れる
l.j.d=1.5;
//関数ポインタl.uに関数fを入れる
l.u=f;
//関数ポインタl.uを実行する
l.j=*l.u(&l.j);
//戻り値を表示する
printf("%ld",l.j.i);
//改行する
printf("\n");
//戻り値を表示する
printf("%lf",l.j.d);
//改行する
printf("\n");
return 0;
}
実行結果
console
_0__1__2__3__4__5__6__7__8__9__10_11
1.500000