• ベストアンサー

関数に配列を渡すときの質問です

関数に配列を渡したいんですがこのソースが問題ないか見てください。 #include<stdio.h> #define N 10 #define M 20 int sig(int X[],int x); main() { int a[N],b[M],i,x,y; for(i=0 ; i<N ; i++){ a[i]=i; } for(i=0 ; i<M ; i++){ b[i]=i; } x=sig(a,N); y=sig(b,M); } int sig(int Z[],int x){ int i,k; k=0; for(i=0 ; i<x ; i++){ k=k+Z[i]; } return k; } ソースは以上です。 1つのソースの中でa[N]とb[M]のように違う数の 配列があるんですが、その配列全部(0~N-1、0~M-1)とかを足してくれる(シグマ)関数を作りたいんですが、Z[]と配列の数を指定しなくてもちゃんと動いてくれるんでしょうか?関数のほうの int x で配列の数を指定するようにしています。 自分でテストした限りではちゃんと動いているようなんですが、間違ってるようなら指摘お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • qcelp
  • ベストアンサー率38% (20/52)
回答No.1

配列のサイズを指定していますので、パラメータの渡し方は良いと思いますが、int型の配列を渡して、その和である戻り値がint型だとオーバーフローする可能性があります。 配列のサイズが任意だとそこがやっかいです

sin11
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>Z[]と配列の数を指定しなくてもちゃんと動いてくれるんでしょうか? Cの仕様として、配列のサイズは関数の呼び出し先に 渡されません。 なので、sin11さんのソースのように、サイズも一緒に 引数で渡す必要があります。 ということで、あってますよ。

sin11
質問者

お礼

ありがとうございました。

関連するQ&A