ポインタ(探して、見つかった位置)を返す関数

以前(e34045m1.htm)に紹介した「配列の指定位置から指定データを探す 」の別解です。

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