1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

関数の引数に配列を受け渡すとき

Posted at

#この記事で話したいこと
自作関数の引数に配列を指定したところ、要素数の受け渡しで引っかかったことがあったので、備忘録。

#目次
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

関数に、要素数も渡してあげれば、配列の和を計算することができました。

1
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?