配列の値の渡し方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
C初心者

配列の値の渡し方

#1

投稿記事 by C初心者 » 17年前

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);
}

Hermit

Re:配列の値の渡し方

#2

投稿記事 by Hermit » 17年前

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

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


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

たかぎ

Re:配列の値の渡し方

#3

投稿記事 by たかぎ » 17年前

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で、とうことであれば、やはりサイズを渡すしかありません。

閉鎖

“C言語何でも質問掲示板” へ戻る