说我宣布了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)。
我可以开灯吗?
答案 0 :(得分:6)
您只能重新分配指向已分配的内存块的指针。因此,您可以重新分配(数组),但不能使用数组[2],因为它是指向内存块中间位置的指针。
您可能想尝试memmove。
编辑:为了回应ThingyWotsit的评论,在将你想要的数据记忆到数组的前面之后,你可以重新分配以放弃尾端。
答案 1 :(得分:0)
只需使用array += 2
或array = &array[2]
即可。你不能realloc()
它。