配列内への入力2  

以前(e34042m1.htm)に紹介した「配列へキー入力する関数」の別解です。

以前に紹介したinput_i 関数の定義と実行例を示します

#include <stdio.h>

/* 数字でないデータ入力まで、pが指し示す配列へ入力する。
入力したデータ個数が戻り値(imaxは、p配列が扱える最大個数)*/
int input_i(int *p , int imax)
{
	int icount = 0;
	while( icount < imax ) {
		printf("%d:DATA>", icount);
		if( fscanf(stdin, "%d", p + icount) != 1) break;
		icount++;
	}
	fflush(stdin);
	return icount;
}
main()
{
	int array1[10];
	int count1 = 0;
	int i;

	count1 = input_i(array1, 10);

	for(i = 0; i < count1; i++){
		printf("%d:%d\n", i, array1[i]);
	}
}
0:DATA>5
1:DATA>2
2:DATA>6
3:DATA>5
4:DATA>end
0:5
1:2
2:6
3:5

上記のinput_i 関数では、関数から得られる情報(入力したデータ個数)を戻り値にしています。
同じ動作結果を得る別のプログラムを、以下に示します。(C言語特有の関数の作り方です)
それは戻り値でなく、引数で得る方法に変更した形態です。
具体的には、得たい情報用の変数のアドレス(&count)を実引数にして関数を呼び出し、
関数側で、その引数のポインタが指し示す記憶域に、関数で得た結果を設定する作り方です。
この、得たい情報のアドレスを指定するため、引数が一つ多くなります。
この方法の定義と利用例を以下に示します。 ■■■■ の記述を正しく直して完成くだささい。
(なお、[]演算子でなく、*演算子を使ってください。)

←編集 入力後に クリックください。

このように基本データ型に対して、 引数のアドレス渡しで関数側に変更させる作り方は、 ポインタが使える言語(C言語など)特有の作り方です。