Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C数组提取_C_Arrays - Fatal编程技术网

C数组提取

C数组提取,c,arrays,C,Arrays,我有一个整数数组。让我们假设 int a[5]={1,2,1,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)); 但是,如果不需要结果是两个独立

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

int a[5]={1,2,1,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));
但是,如果不需要结果是两个独立的数组,并且不介意它们是指针,则可以执行以下操作:

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]);
}

您可以使用
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]);
}

如果只想引用原始数组的指定元素:

int *b = a + 3; //  b[0] = a[3]

如果只想引用原始数组的指定元素:

int *b = a + 3; //  b[0] = a[3]

您的意思是将它们复制到新数组中,还是定义引用原始数组部分的新方法?您尝试了什么?您在哪里遇到了困难?您了解如何访问数组的元素吗?您知道如何分配给数组的元素吗?为什么不直接从源数组的值循环和分配目标数组的元素呢?上面描述的
memcpy
方法效率更高,但你不会给人任何印象,认为你甚至不知道如何以直接的方式完成它。我很想否决这个问题,但我真的不知道你是懒惰还是对编程一无所知。我通过使用memcpy得到了解决方案。我不知道memcpy。谢谢你的帮助。你的意思是将它们复制到新的数组中,还是定义引用原始数组部分的新方法?你尝试了什么?您在哪里遇到了困难?您了解如何访问数组的元素吗?您知道如何分配给数组的元素吗?为什么不直接从源数组的值循环和分配目标数组的元素呢?上面描述的
memcpy
方法效率更高,但你不会给人任何印象,认为你甚至不知道如何以直接的方式完成它。我很想否决这个问题,但我真的不知道你是懒惰还是对编程一无所知。我通过使用memcpy得到了解决方案。我不知道memcpy。谢谢你的帮助。+1给出了很好的答案(比我早10秒发布)
memcpy
比循环(或任何其他替代方法)的代码少得多。我通过使用memcpy获得了解决方案。我不知道memcpy。谢谢你的帮助。+1给出了很好的答案(比我早10秒发布)
memcpy
比循环(或任何其他替代方法)的代码少得多。我通过使用memcpy获得了解决方案。我不知道memcpy。谢谢你的帮助。我通过使用memcpy得到了解决方案。我不知道memcpy。谢谢你的帮助。我通过使用memcpy得到了解决方案。我不知道memcpy。谢谢你的帮助。