gpt4 book ai didi

c - 移位分配的内存

转载 作者:行者123 更新时间:2023-11-30 15:02:27 25 4
gpt4 key购买 nike

我有这个代码:

int items = 2;
int *array = malloc(items * sizeof(int));
array[0] = 1;
array[1] = 2;

我想弹出第一个项目并从左侧移动分配的内存来执行以下操作:

array[0] == 2

可能需要获取数组的地址并将其移位为 poped_items * sizeof(int) 或类似的内容?第一个 realloc 参数应该是什么?

最佳答案

如果您需要删除左侧的项目(并且仅使用 &array[ItemsToShift] 而不是普通的 array 是不够的),请不要 realloc,只是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]) \
);

您可以在memmove之后进行realloc:

new_array = realloc(array, (Size-Nshift)*sizeof(array[0]));

但这可能会浪费周期,因为您可以忽略由移位创建的动态数组末尾的间隙。

关于c - 移位分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41061722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com