コードは書かれたとおりに上から処理していきます。
return は別の言い方をすれば「右にあるデータを伴って終了する」みたいな意味です。
(厳密には違いますが)
"return 0" とあれば 0 というデータを伴って終了します。
関数は ( "■" を半角スペースと見立てて書くと )
型■関数名(引数){
// 処理内容
return■戻り値;
}
が基本となります。
型 = 戻り値(の型) です。
よってWarningなりErrorなりがでているはずですが。
return 0; とするのは、あくまで「C言語にはbool ( 言語によってはBooleanとか ) がないため」です。
そこで boolの代わりに intで代用して、( main関数の場合は慣習的に ) 0 が成功、それ以外 ( マイナス値だったりとか ) ならそれぞれのエラーとしてやっています。
もし「成功した数を返す」というような個数系の値なら 0 を失敗 ( 何もない )、(1以上の)正の数なら成功した数...みたいにしますし、
0が意味を持つ場合 ( 例えば 文字列から整数を取り出すとか ) なら、負の数をエラー値、0は成功はしたが個数や値が0, 正の数なら個数...みたいにすることもありますね。
そういう風に意味が異なってきます。
C
1void maxmin(int *array,int *max,int *min)
2{
3 int i = 0;
4
5 *max = 0;
6 *min = 100;
7
8 while (array[i] != -1) {
9 if (array[i] > *max) *max = array[i];
10 if (array[i] < *min) *min = array[i];
11 i++;
12 return 0;
13 }
14}
を読んでみると、
C
1void maxmin(int *array,int *max,int *min)
2{
3 int i = 0;
4
5 // 念のため初期設定(厳密には初期設定じゃないけど...)
6 *max = 0;
7 *min = 100;
8
9 // -1 がでるまでループ
10 while (array[i] != -1) {
11 // max より大きければ 付け替え
12 if (array[i] > *max) *max = array[i];
13 // 同上( 向きが違うだけ )
14 if (array[i] < *min) *min = array[i];
15 // 次に進ませる
16 i++;
17 // 0 を伴って終了
18 return 0;
19 }
20}
というような状態なので、疑似コード(ぽい何か)で書くと、
1. 念のため初期設定
2. -1 がでるまでループ
2.1. maxより大きければ...
2.2. minより小さければ...
2.3. (0) を伴って終了
みたいになるので、
最大要素数である 10 まで -1 以外の値が入っていても初回 whileに突入して 2.3. で関数そのものから抜けているので whileの先端に来ることはありません。
よって 多くても1回しか動かない。( 0番目がすでに -1 なら条件式を満たしていないからスルー。 )
なので、2.3. の位置に return を持ってくるのではなくて、3. 辺りに持ってくること。
あるいは while内にif文を設けて、「100という値が出た場合は強制的に関数から抜ける」みたいにするなら別ですが、今回の場合は関係がありませんから、
2.3. の位置ではなく 3. の位置に持ってくる。
また、関数の型が void になっているので return; でいいです。
(最後まで到達するのなら return; も不要という説もあるが...)