1

我有一个整数数组。让我们假设

int a[5]={1,2,1,2,2};

a我想通过将数组的一些元素复制到一些不同的数组中来将此数组分成两个数组,例如b[2]and 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));

但是,如果您不需要结果是两个独立的数组,并且不介意它们是指针,您可以这样做:

int *b= a, *c = &a[2];

除了两个重要区别外,这两个指针的使用方式与数组类似:

  • sizeof(b)并将sizeof(c)表示指针的大小,而不是数组的大小
  • 这两个指针指向的内存不会独立于原始a[5]数组。

如果你打印这两个指针指向的内存内容,你会得到和数组一样的结果:

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 回答