0
2

More than 1 year has passed since last update.

関数ポインタを構造体内に定義する

Last updated at Posted at 2023-08-28

前回

関数ポインタを使った再帰的呼び出し

参考ページ

モノづくりC言語塾 C言語 関数ポインタ【ポインタを使って関数を呼ぶ仕組み解説】

超初心者向けプログラミング入門【構造体】

準備

今回はオンラインコンパイラを使用します。
オンラインコンパイラ

ソースコード

sample.c
#include <stdio.h>

//関数fを代入することを想定して、関数ポインタuを宣言する
int (*u)(int i);

//関数fを代入することを想定して、関数ポインタuを構造体HELLO内に定義する
struct HELLO{
	int j;
	int (*u)(int i);
};

int f(int i){
	//引数iを表示
	printf("_%d_",i);
	//引数iに1を加算
	i++;
	if(i>10){
		//引数iが10より上になったら1を返す
		return 1;
	}
	else{
		//関数ポインタuにより、関数fを代理的に再帰呼び出し
		u(i);
	}
	//戻り値として0を返す
	return 0;
}

int main() {
    //関数ポインタuに関数fを代入する
    u=f;
	//構造体HELLOの変数lを宣言する
	struct HELLO l;
	//変数l.jに0を入れる
	l.j=0;
	//関数ポインタl.uに関数fを入れる
	l.u=f;
	//関数ポインタl.uを実行する
	l.u(l.j);
    //改行する
	printf("\n");
	
	return 0;
}

実行結果

console
_0__1__2__3__4__5__6__7__8__9__10_

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2