- ベストアンサー
配列のsizeofに関する疑問 - C言語
- C言語で配列のsizeofに関する疑問があります。
- 関数内で配列のsizeofを使用すると正しく動作しないため、その理由を知りたいです。
- 初心者の質問ですが、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
int FindMax(int ary[]) と宣言しても FindMaxに渡されるのは 配列aryの先頭要素のアドレスだけです 配列自体が関数に引き渡されるわけではありません 配列を扱う関数では 呼び出し側で 配列の先頭アドレスと要素数を渡すといった手法をとります int FindMax( int ary[], int nSize) { int i; int max; max = ary[0]; for(i=1;i<nSize;i++) { if(ary[i]>max) { max = ary[i]; } } printf("The size of the ary is %d\n",ary_size); return(max); } といった具合に定義します 呼び出し側で int myArray[] = {1,2,3,4,5,6,7,2}; // 配列全体の大きさを 配列の1つの要素の大きさで除算することで 要素数を算出する int nLen = sizeof(myArray) / sizeof(myArray[0]); max = FindMax(myArray, nLen); といった具合で …
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
>int FindMax(int ary[]) >{ >int ary_size = sizeof(ary)/4; ary の宣言は、int ary[] で、これは int *ary と同じ意味です。 つまり、sizeof(ary) はポインタのサイズになります。 これは、Cでは配列自体を引数で渡せないことから来ています。配列の先頭アドレスのポインタを渡すことになる。
お礼
返信ありがとうございます.そういえば >配列の先頭アドレスのポインタを渡すことになる。 ことを学んだのに忘れていました.実際に出くわして,思い出しました.ありがとうございます.ポインタ変数の大きさを得ていたのですね!
お礼
ありがとうございます.便利な使い方も教えてもらえたので今後の参考になりました.