【发布时间】:2017-08-20 17:19:24
【问题描述】:
假设我有一个这样的整数数组
#define MAX 5
int bar [MAX] = {0};
int foo [MAX] = {3,1,0,0,0};
现在我想移动这个数组,使所有空条目都在左边,即bar = {0,0,0,3,1}。
我想我可以这样做
- 找出我必须执行的轮班次数
- 使用
memmove()进行轮班。
我用下面的循环解决了 1.
for (shift = MAX - 1; shift >= 0; --shift) {
if (foo[shift]) break;
}
但我现在不知道如何使用memmove() 执行轮班,我尝试使用memmove(bar + shift, foo, MAX * sizeof(*foo)-1); 但没有成功。
memmove() 是完成这项工作的正确工具吗?如前所述,如何循环整数数组?如果这发生在 bar 作为指针传递的函数内部怎么办?
【问题讨论】:
-
如何移入移出的元素?
-
@EugeneSh。我想我需要另一个
memmove? -
显然还有一个中间自助餐来存放它们。
-
@EugeneSh。我需要中间缓冲区吗?我将
foo移动到bar,所以foo将完好无损,不是吗?我不能再移动foo吗? -
对。虽然你想要它就地。在这种情况下,您可以改用
memcpy..