我有这段代码:
int items = 2;
int *array = malloc(items * sizeof(int));
array[0] = 1;
array[1] = 2;
我想弹出第一个项目并从左侧移动分配的内存来执行:
array[0] == 2
可能需要获取数组的地址并将其转移到 poped_items * sizeof(int)
或类似的东西?什么应该是第一个realloc论点?
答案 0 :(得分:1)
如果您需要删除左侧的项目(仅使用&array[ItemsToShift]
而不是简单的array
是不够的),请不要realloc
,只需{{1 }}:
memmove
如果需要,可以将其设为通用宏类型:
memmove(&array[0], &array[1], (items-(&array[1]-array[0]))*sizeof(int));
您可以在#define DARRAY_shift(Array, Size, Nshift) \
memmove(&array[0], \
&array[Nshift], \
(Size-(&array[Nshift]-&array[0]))*sizeof(Array[0]) \
);
之后realloc
:
memmove
但这可能会浪费周期,因为你可以忽略轮班创建的动态数组末尾的差距。