以前に紹介したindexof_i 関数の定義と実行例を示します
#include <stdio.h> int indexof_i(int *a , int cnt, int v) { int idx = 0; while(idx < cnt && a[idx] != v){/* 配列の中を探す繰り返し */ idx++; } if( idx < cnt ) { return idx;/* 見つかった */ } else { return -1;/* 見つからない */ } } main() { int a[] = { 5, 2, 6, 5 ,3 , 5};/* 操作対象の配列 */ int count = 6; int data; /* 検索データ */ int idx,idx2; /* 検索結果記憶用 */ printf("探したい値>"); scanf("%d", & data); idx = indexof_i( a, count , data); if(idx != -1) { printf("%d の位置で見つかりまた。\n", idx); /* 見つかった次の位置から、再び検索します (検索開始位置がずれた分だけ検索範囲は狭まります) */ idx2 = indexof_i( a + idx + 1, count - idx -1 , data); if(idx2 != -1) { printf("%d の位置で見つかりまた。\n", idx + 1 + idx2); } } }
探したい値>5 0 の位置で見つかりまた。 3 の位置で見つかりまた。
上記のindexof_i 関数では、探して見つかったデータの位置を示す添え字 を戻り値にしています。
同じ動作結果を得る別のプログラムを、以下に示します。(C言語特有の関数の作り方です)
それは 添え字でなく、見つかったデータが記憶される記憶域の
アドレス(データを指すポインタ)を戻り値にした形態です。
なお、見つからない場合は NULLを返す仕様です。 NULLは、
一般に stdio.hのヘッダーファイル内で#defineにより定義される 0の値で、
どこも指し示していないポインタを意味する時に使われます。
この方法の定義と利用例を以下に示します。 ■■■■ の記述を正しく直して完成くだささい。
(なお、[]演算子でなく、*演算子を使ってください。)
←編集 入力後に クリックください。
このようなポインタを返す関数は、C言語特有の作り方です。