第61回 プログラミングについて『配列のコピーと構造体』

配列をコピーするときには各要素を1つ1つ行なわなければなりません。これは基本です。しかしながら、これをなんとかして簡単な方法で行ないたいときがあります。
#define MAX_DATA 10
int data1[MAX_DATA],data2[MAX_DATA];
int i;
:
:
for(i=0;i<MAX_DATA;i++)data1[i]=data2[i];
通常はこのようにして配列のコピーを行ないます。通常はこれで十分なのですが、ループを使わずにコピーしたいときがあります。そういうときには memcpy 関数を使用する方法があります。
memcpy(data1,data2,MAX_DATA*sizeof(int));
とすることでコピーすることができます。もう1つ考えられる手段は、構造体が代入できることを利用することです。いま次のように定義された構造体があると、
struct data_strct data1,data2;
data1 を data2 に代入するには、
data2=data1;
とすれば簡単に行なうことができます。これを利用すると最初の例は、
#define MAX_DATA 10
int data1[MAX_DATA],data2[MAX_DATA];
struct copy_strct{
char data[sizeof(data1)];
};
:
:
*(struct copy_strct *)data2 = *(struct copy_strct *)data1;
と表現することができます。例の内容が単純なのであまりメリットは無いような気がするのですが、同じサイズの配列を頻繁にコピーしたいけれども関数を呼び出したくないなどといったときには有効な手段かも知れません。
今回は非常に短いのですが、ちょっとした小技の紹介でした。
それではまた次回。