引数が配列のときの関数内でのsizeofについて
こんにちは.
Cを勉強している最中に疑問にあったことを質問させていただきます.以下のプログラムで配列myarrayの中の最大のメンバーを見つけるプログラムです.コメントアウトしてある
//int ary_size = sizeof(myarray)/4;
をグローバル変数で定義するとうまく最大の数を見つけてくれるのですが,
関数の中で
int ary_size = sizeof(ary)/4;
と定義するとうまくいきません.そこで,以下の
printf("The size of the ary is %d\n",ary_size);
という表示を追加したところ,ary_size = 1となっていることが分かりました.
なぜそうなるのでしょう?関数の引数はint ary[]の配列なので,sizeof(ary)でaryがメモリ中で占めるバイト数が得られるんじゃないんですかね?ちなみに私の環境ではsizeof(int)は4バイトなので
int ary_size = sizeof(ary)/4;
と割る4で配列のメンバーの数を求めています.
初心者の質問ですみませんがよろしくお願いします.
#include <stdio.h>
#include <Windows.h>
int myarray[] = {1,2,3,4,5,6,7,2};
int FindMax(int ary[]);
//int ary_size = sizeof(myarray)/4;
int main()
{
int max;
max = FindMax(myarray);
printf("The maximum value is %d\n",max);
Sleep(2000);
return(0);
}
int FindMax(int ary[])
{
int ary_size = sizeof(ary)/4;
int i;
int max;
max = ary[0];
for(i=1;i<ary_size;i++)
{
if(ary[i]>max)
{
max = ary[i];
}
}
printf("The size of the ary is %d\n",ary_size);
return(max);
}
お礼
皆様良きアドバイス、ヒントを頂き誠にありがとうございます。 また、レベルの低い質問をすると思いますが、なるべくしないように気をつけるつもりですが、宜しくお願い致します。