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:配列の値の渡し方
InitArray() は、渡されたポインタが、配列の要素がいくつであるか判断手段がありません。
それを実現するには、InitArray(int *,int *,size_t size) などの様に
配列のサイズか、配列の個数などを渡す必要があります。
現在は、InitArray(int *, int *) と同じ事だということはわかってますよね…。
別のやり方では、わざわざ InitArray() 関数を作らなくても、
配列である限りは、1次元であろうと2次元であろうと、連続した領域にある事は保証されている為、
memcpy() や、memmove() で、メモリー領域をコピーしてしまえばいいだけです。
当然ではありますが・・・これも配列のサイズは必要です。
それを実現するには、InitArray(int *,int *,size_t size) などの様に
配列のサイズか、配列の個数などを渡す必要があります。
現在は、InitArray(int *, int *) と同じ事だということはわかってますよね…。
別のやり方では、わざわざ InitArray() 関数を作らなくても、
配列である限りは、1次元であろうと2次元であろうと、連続した領域にある事は保証されている為、
memcpy() や、memmove() で、メモリー領域をコピーしてしまえばいいだけです。
当然ではありますが・・・これも配列のサイズは必要です。
Re:配列の値の渡し方
C++でよければ、
どうしても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で、とうことであれば、やはりサイズを渡すしかありません。