1

整数の配列があります。仮定しましょう

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を使用してこれをどのように達成できますか?

4

3 に答える 3

6

次を使用して、データを新しい配列にコピーできます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)はなくポインタのサイズを表します
  • 2 つのポインターが指すメモリーは、元の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]);
}
于 2013-08-13T17:30:17.733 に答える
2
int a[5] = {1,2,1,2,2};
int b[2], c[3];

memcpy(b, a, sizeof(b));
memcpy(c, a + 2, sizeof(c));
于 2013-08-13T17:35:10.340 に答える
1

元の配列の指定された要素を参照するだけの場合:

int *b = a + 3; //  b[0] = a[3]
于 2013-08-13T17:38:58.913 に答える