C 为什么要更改我的结构副本?

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

我有一个保存原始数据的原始结构数组。我想保留原始数据,所以我复制了一份。我对复制的结构进行排序,当我打印原始结构时,它会打印出排序后的结构。我可以利用一切手段,但我不确定它为什么这样做。

您需要在for循环中分别复制结构的每个成员

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
}