整数の配列があります。仮定しましょう
int a[5]={1,2,1,2,2};
この配列を2つの配列に分割したいのは、配列のいくつかの要素をとのようa
ないくつかの異なる配列にコピーすることです。b[2]
c[3]
int b[2]
{1,2}
int c[3]
{1,2,2}
Cを使用してこれをどのように達成できますか?
次を使用して、データを新しい配列にコピーできますmemcpy
。
int b[2], c[3];
memcpy(b, a, sizeof(b));
memcpy(c, &a[2], sizeof(c));
ただし、結果を 2 つの独立した配列にする必要がなく、ポインターであってもかまわない場合は、次のようにすることができます。
int *b= a, *c = &a[2];
これら 2 つのポインターは、次の 2 つの重要な違いを除いて、配列と同様の方法で使用できます。
sizeof(b)
配列でsizeof(c)
はなくポインタのサイズを表しますa[5]
配列から独立していません。これら 2 つのポインタが指すメモリの内容を出力すると、それらが配列であるかのように同じ結果が得られます。
for (int i =0 ; i != 2 ; i++) {
printf("b[%d]=%d\n", i, b[i]);
}
for (int i =0 ; i != 3 ; i++) {
printf("c[%d]=%d\n", i, c[i]);
}
int a[5] = {1,2,1,2,2};
int b[2], c[3];
memcpy(b, a, sizeof(b));
memcpy(c, a + 2, sizeof(c));
元の配列の指定された要素を参照するだけの場合:
int *b = a + 3; // b[0] = a[3]