0
1

More than 1 year has passed since last update.

複数の変数を関数の戻り値とする方法と関数管理方法

Last updated at Posted at 2023-08-31

前回

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

参考ページ

モノづくり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

0
1
2

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
1