ページ 11

配列の値の渡し方

Posted: 2008年7月05日(土) 13:40
by C初心者
InitArrayという配列のData2の値をData1に移す関数を考えているのですが
下記ですと1番目しか入れ替えてくれません。
どうすればよいのでしょうか?
また同じことを2次元配列でする場合、どのようにすればいいのでしょうか?

void InitArray(int Data1[/url] , int Data2[/url]);

void InitArray(int Data1[/url] , int Data2[/url])
{
int A_MAX = sizeof(Data1)/sizeof(Data1[0]);
for(int i=0; i<A_MAX; i++){
Data1 = Data2;
}
}

//loop内
InitArray(z , x);


for(int i=0; i<10; i++){
DEB_TEXT(" Array = %d",(int)z);
}

Re:配列の値の渡し方

Posted: 2008年7月05日(土) 14:04
by Hermit
InitArray() は、渡されたポインタが、配列の要素がいくつであるか判断手段がありません。
それを実現するには、InitArray(int *,int *,size_t size) などの様に
配列のサイズか、配列の個数などを渡す必要があります。

現在は、InitArray(int *, int *) と同じ事だということはわかってますよね…。


別のやり方では、わざわざ InitArray() 関数を作らなくても、
配列である限りは、1次元であろうと2次元であろうと、連続した領域にある事は保証されている為、
memcpy() や、memmove() で、メモリー領域をコピーしてしまえばいいだけです。
当然ではありますが・・・これも配列のサイズは必要です。

Re:配列の値の渡し方

Posted: 2008年7月05日(土) 16:47
by たかぎ
C++でよければ、
template <typename T, std::size_t N>
void InitArray(T (&Data1)[N], T (&Data2)[N])
{
  std::copy(&Data2[0], &Data2[N], &Data1[0]);
}
で済みます。
どうしてもCで、とうことであれば、やはりサイズを渡すしかありません。