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