11−3.関数の戻り値を返す方法

11-1. で見てきたように、下位の関数(呼ばれる側)から上位の関数(呼ぶ側)へ戻り値を返すことができますが、 その方法には、「1個の戻り値」を返す方法と、「複数の戻り値」を返す方法があります。

さらに、複数の戻り値を返す場合には、「複数の変数のアドレス」を引数にする場合と、 「配列のアドレス」を引数にする場合があります。

(1)1個の戻り値を返す

return 戻り値; で値を返す ⇒ 11-1. 参照

(2)複数の戻り値を返す

【変数を使って複数の戻り値を返す】

複数の変数のアドレスを引数にして、上位関数側と下位関数側でデータを共有し、見かけ上、複数のデータを返したようにします。

(例)
#include <stdio.h>

void swap(int *x, int *y);

int main(void)
{
	int a = 123, b = 456;
	
	printf("呼出し前a = %d b = %d\n", a, b);
	swap(&a,&b);		/* 変数a と変数b のアドレスを渡す */
	printf("呼出し後a = %d b = %d\n", a, b);
	
	return 0;
}

/* 変数a のアドレスをポインタx に、変数b のアドレスをポインタy に入れる */
void swap(int *x, int *y)
{
	int wk;
	
	wk = *x;
	*x = *y;		/* ポインタを使って中身を入換える。*/
	*y = wk;
}
(実行結果)
呼出し前 a = 123 b = 456
呼出し後 a = 456 b = 123

(3)配列を使って複数の戻り値を返す

配列の先頭要素のアドレスを引数にして、上位関数側と下位関数側で配列を共有し、見かけ上、複数のデータを返したようにします。

(実行結果)
#include <stdio.h>

void waru2(int *p);

int main(void)
{
	int i;
	int dt[] = { 20, 10, 4, 35, 66, 78, -1 };
	
	waru2(dt);		/* 配列の先頭要素のアドレスを渡す */
	
	for(i = 0; dt[i] != -1; i++) {
		printf("%d ", dt[i]);
	}
	printf("\n");
	
	return 0;
}

void waru2(int *p)		/* 配列dt のアドレスをポインタp に入れる */
{
	while(*p != -1) {
		*p = *p / 2;	/* ポインタの中身を 2 で割る */
		++p;
	}
}
(実行結果)
10 5 2 17 33 39
演習
◆◆前ページ  ▲TOP▲  次ページ◆◆

banner
「初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved