- ベストアンサー
C言語の配列のコピーについて質問です
- C言語の配列のコピーについて質問です。intを要素とする二つの配列a、bとその配列の要素数を受け取り、配列aのすべての要素の値を配列bにコピーする関数を定義し、その関数の機能を確認するプログラム作成するという問題について質問です。
- 配列aを配列bに「先頭から順番に」コピーする関数を作成する。(1)配列aを配列bに「先頭から順番に」コピーする関数を作成する。(2)配列aを配列bに「後ろから順番に」コピーする関数を作成する。
- 配列の要素数(例では4)が変更されても処理できる関数を作成したいです。また、配列の要素の値は関数main()内で表示したいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
(1) 順向きに配列の内容をコピーする関数の処理 iを0からN-1までループさせる。ループ内で行う処理は to[i] = from[i]; である。 (2) 逆向きに配列の内容をコピーする関数の処理 iを0からN-1までループさせる。ループ内で行う処理は to[i] = from[N-(i+1)]; である。 #include <stdio.h> //順向きにコピーする関数 void array_copy(int *to , int *from , int N) { int i; //(1)を記述 } //逆向きにコピーする関数 void reverse_array_copy(int *to , int *from , int N) { int i; //(2)を記述 } //配列を0からN個分表示する関数 void view_array(int *dat , int N) { int i; for( i=0;i<N;i++ ){ printf("%d ",dat[i]); } printf("\n"); } int main(void) { int a[4] = {4,7,6,5}; int b[4] = {0,0,0,0}; view_array(a,4); //Aの表示 view_array(b,4); //Bの表示 array_copy(b,a,4); //Aの内容をBにコピーする view_array(a,4); //Aの表示 view_array(b,4); //Bの表示 reverse_array_copy(b,a,4); //Aの内容を逆向きにBへコピーする view_array(a,4); //Aの表示 view_array(b,4); //Bの表示 return 0; } 関数 array_copy だけで順向き/逆向きを切り替えたいなら 引数の数をもうひとつ増やして、順向きにしたいのか逆向きにしたいのか を判断させるような情報を付けなければできないです。
その他の回答 (3)
- arain
- ベストアンサー率27% (292/1049)
No.1です。 では、書き方を変えましょう。 関数がわからなければ、main関数の中だけでコピーの処理を作ってください。 これが出来なければ関数化は先の話です。
- sleep-soul
- ベストアンサー率57% (4/7)
#include <stdio.h> //#define REVERSE /* 定義すると逆向きにコピー コメントアウトで順向きにコピー */ //Aの内容をBにコピーする関数 void array_copy(int *to , int *from , int N) { int i; for( i=0; i<N; i++ ){ #ifdef REVERSE /* 逆向きの場合の処理 */ to[i] = from[N-(i+1)]; //to[0]にfrom[N-(0+1)]、to[1]にfrom[N-(1+1)]、to[2]にfrom[N-(2+1)]の代入作業をto[N-1]まで行う #else /* 順向きの場合の処理 */ //単純にto[0]にfrom[0]を代入、to[1]にfrom[1]を代入をN-1まで行う #endif } } //配列を0からN個分表示する関数 void view_array(int *dat , int N) { int i; for( i=0;i<N;i++ ){ printf("%d ",dat[i]); } printf("\n"); } int main(void) { int a[4] = {4,7,6,5}; int b[4] = {0,0,0,0}; view_array(a,4); //Aの表示 view_array(b,4); //Bの表示 array_copy(b,a,4); //Aの内容をBにコピーする view_array(a,4); //Aの表示 view_array(b,4); //Bの表示 return 0; }
- arain
- ベストアンサー率27% (292/1049)
丸投げは禁止行為です。 少なくとも、「作れるだけ」は作ってみてそのソースを提示してください。 コピーの方法が分からなくても、関数の呼び出しまでくらいなら作成どきませんか?
補足
申し訳ありません。 考えてみたのですが、for文を用いて作成するのかなぁと思う程度しか分かりません。 #include <stdio.h> void array_copy(int a[], int b[], int s) もしくは void array_copy(int *a[], int *b[], int s) を用いて関数を呼び出すのかなぁと思いました。 少しずつでもいいので教えてください。 お願いします。
補足
申し訳ありませんが#defineや#ifdefなどを用いずにプログラムすることは可能ですか? お願いします。