我有一个结构。
typedef struct Heap {
int length;
int size;
int A[];
} Heap;
我正在尝试制作给定数组的浅表副本并将其存储在此结构中。这样,当数组改变或元素被交换时,这会反映在原始数组中。
Heap * build_max_heap(int A[], int length) {
Heap * heap = malloc(sizeof(Heap) + length*sizeof(int *));
*heap = (Heap) { length, length };
memcpy(heap->A, A, length*sizeof(int *));
/*
for(int i = floor(((heap->length)-1)/2); i >= 0; --i) {
max_heapify(heap, i);
}
*/
return heap;
}
int main() {
int A[] = {0, 3, 7, 61, 3, 40, 4, -1, 8, 10};
Heap * heap = build_max_heap(A, 10);
A[0] = 100;
for(int i = 0; i < 10; ++i) {
printf("%i, ", A[i]);
}
printf("\n");
for(int i = 0; i < 10; ++i) {
printf("%i, ", heap->A[i]);
}
return 0;
}
当前返回以下内容。
100, 3, 7, 61, 3, 40, 4, -1, 8, 10,
0, 3, 7, 61, 3, 40, 4, -1, 8, 10,
我的预期结果是
100, 3, 7, 61, 3, 40, 4, -1, 8, 10,
100, 3, 7, 61, 3, 40, 4, -1, 8, 10,
同样heap->A[0] = 100;应该有同样的效果。我也不确定是否length*sizeof(int *)正确或应该正确,length*sizeof(int)但是我想这将通过回答前者来解决。