ポインタによる関数への配列渡し
林晴比古さんの「新C言語入門」でC言語を勉強している初心者です。
現在ポインタの勉強をしています。色々教科書の文例等をポインタで書くとどうなるか試しております。
上書P200練習問題2に「配列の最大値を返す(その際配列の長さを渡す)」プログラムがあり、それをポインタで渡すプログラムに直してみました。
仮引数に「maxdata」を設定し、そのアドレスを関数側に渡し、関数側ではポインタとして受け取る(そうすれば関数側からはreturnで値を返す必要がない)、と考え、下記のように書いてみました。
#include <stdio.h>
void max_of_array(int n[], int len, int *ans);
int main(void)
{
int dt[6] = {50,20,80,30,10,40};
int maxdata;
max_of_array(dt,6,&maxdata);
printf("最大値=%d\n", maxdata);
return 0;
}
void max_of_array(int n[], int len, int *ans)
{
int i;
ans = &n[0];
for (i=1; i<len; i++){
if (*ans < n[i]) *ans = n[i];
}
}
しかしコンパイルすると、何故か「最大値=1」となってしまいます。(正しくは80です)
他にも色々試してみましたがうまくいかず、かなり考えてみたのですがどうしても分かりません。お分かりの方、どうすれば正しくなるのが教えてください、よろしくお願いします。