以前に紹介した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言語など)特有の作り方です。