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。谢谢你的帮助。