我可以从数组的某个位置重新分配吗?
Can I realloc from a position of the array?
假设我声明了 array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
。稍后我希望它是 array[8] = {2, 3, 4, 5, 6, 7, 8, 9}
.
忽略前 2 个元素。所以它将在 array[2]
开始。将 array
重新分配给 array[2]
。
我试过:
int *array=(int*)malloc(10*sizeof(int));
...//do stuffs
array=(int*)realloc(array[2],8*sizeof(int));
没用。既不使用 &array[2], *array[2]
,也不创建辅助数组,将 Array 重新分配给 AuxArr 而不是 free(AuxArr)。
我可以拿灯吗?
您只能重新分配指向已分配内存块的指针。所以你可以重新分配(数组),但不能重新分配数组[2],因为它是指向内存块中间位置的指针。
您可能想尝试 memmove。
编辑:针对 ThingyWotsit 的评论,在将您想要的数据记忆到数组的前面之后,您可以重新分配以丢弃尾端。
只需使用 array += 2
或 array = &array[2]
。你不能 realloc()
它。
假设我声明了 array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
。稍后我希望它是 array[8] = {2, 3, 4, 5, 6, 7, 8, 9}
.
忽略前 2 个元素。所以它将在 array[2]
开始。将 array
重新分配给 array[2]
。
我试过:
int *array=(int*)malloc(10*sizeof(int));
...//do stuffs
array=(int*)realloc(array[2],8*sizeof(int));
没用。既不使用 &array[2], *array[2]
,也不创建辅助数组,将 Array 重新分配给 AuxArr 而不是 free(AuxArr)。
我可以拿灯吗?
您只能重新分配指向已分配内存块的指针。所以你可以重新分配(数组),但不能重新分配数组[2],因为它是指向内存块中间位置的指针。
您可能想尝试 memmove。
编辑:针对 ThingyWotsit 的评论,在将您想要的数据记忆到数组的前面之后,您可以重新分配以丢弃尾端。
只需使用 array += 2
或 array = &array[2]
。你不能 realloc()
它。