C 为什么要更改我的结构副本?
我有一个保存原始数据的原始结构数组。我想保留原始数据,所以我复制了一份。我对复制的结构进行排序,当我打印原始结构时,它会打印出排序后的结构。我可以利用一切手段,但我不确定它为什么这样做。您需要在for循环中分别复制结构的每个成员C 为什么要更改我的结构副本?,c,C,我有一个保存原始数据的原始结构数组。我想保留原始数据,所以我复制了一份。我对复制的结构进行排序,当我打印原始结构时,它会打印出排序后的结构。我可以利用一切手段,但我不确定它为什么这样做。您需要在for循环中分别复制结构的每个成员 void sched(struct process ** process, int arrSize){ struct process ** copy = process; quickSort(copy, 0, arrSize-1); for(int i=0;i
void sched(struct process ** process, int arrSize){
struct process ** copy = process;
quickSort(copy, 0, arrSize-1);
for(int i=0;i
您不能复制结构。复制指向结构的指针的指针。在一张纸上写下您的家庭地址,并将其称为a
。复制那张纸并调用副本b
。把地址写在纸上的房子烧毁。现在取纸a
到那个地址去。它是不是被烧毁了?好吧,我明白了,但是我怎么才能建造一个看起来像房子的新房子呢@usr2564301(重新删除注释)。通过与=
相等,只能复制单个结构。对于数组,您可以使用memcpy
(已分配足够的内存),并且函数需要返回其地址。这需要深入了解您要复制的内容,否则无法复制。许多C API都有某种“复制”函数专门用于此目的,但如果没有,则需要创建一个。如果你犯了一个错误,你可能会创建一个“浅拷贝”,并且其中的一部分会与原件共享,如果一个被释放,另一个没有被释放,那么以后会导致各种各样的错误。
for (int i = 0; i < arrSize; i++)
{
copy[i].member1 = process[i].member1;
copy[i].member2 = process[i].member2;
// and so on
}