#この記事で話したいこと
自作関数の引数に配列を指定したところ、要素数の受け渡しで引っかかったことがあったので、備忘録。
#目次
1.配列を渡す関数で起きた不具合事象
2.解決案
#Target
自分
#1.不具合事象
例えば、渡した配列を使って、和計算をするときなどに不具合が発生します。
#include<stdio.h>
int func(int array[]);
int main()
{
int array[] = {90,30,40};
int sum_array,num;
num = sizeof(array)/sizeof(array[0]);
printf("%d\n",num);
sum_array = func(array[]);
printf("%d\n",sum_array);
}
int func(int array[])
{
int i, num, sum_array=0;
num = sizeof(array)/sizeof(array[0]);
printf("%d\n",num);
for(i = 0; i < num; i++){
sum_array += array[i];
}
return sum_array;
}
3
2
-2069389
自作関数内の配列要素数がmain関数内で数えた要素数と違います。
いろいろ調べましたが、理由はいまいちわかりませんでした。
そもそもsizeof演算子に引っかかりました。。。
sizeof演算子は、配列の要素数を数えているのではなく、バイト数を表示しているらしい
#2.これで解決?
#include<stdio.h>
int func(int array[], int num);
int main()
{
int array[] = {90,30,40};
int sum_array,num;
num = sizeof(array)/sizeof(array[0]);
printf("%d\n",num);
sum_array = func(array,num);
printf("%d\n",sum_array);
}
int func(int array[], int num)
{
int i, num, sum_array = 0;
printf("%d\n",num);
for(i = 0; i < num; i++){
sum_array += array[i];
}
return sum_array;
}
3
3
160
関数に、要素数も渡してあげれば、配列の和を計算することができました。