我试图了解如何使用C语言中的结构,我偶然发现了列表。我在C中找到了以下列表定义:
typedef struct ListNode∗ List;
struct ListNode {
int item;
List next;
};
我们假设我有一个可以创建新List的函数,它生成了一个List li,其中item = 1和next = someList。
然后我将copy li创建为一个新变量并对其执行一些操作:
List li1 = li;
li1->item = 2;
现在这种变化是否会影响到李本身?意义li->item
现在也是2?
我想我真正要问的是,我是否真的复制了结构类型,或者只是创建了另一个引用。有人可以为我澄清这个吗?
答案 0 :(得分:1)
假设li
指向有效的ListNode
对象,则
List li1 = li;
创建指针的副本。在上面的定义和初始化之后,你有两个指针(li
和li1
)都指向同一个对象。
如果你想要深副本,那么你需要明确地实现它,对于列表来说意味着复制列表中的每个节点。
答案 1 :(得分:1)
我想我真正要问的是,我是否真的复制了结构类型,或者只是创建了另一个引用类型。有人可以为我澄清这个吗?
您的类型List
不是结构类型,而只是指向结构的指针。
顺便说一句:在typedef中隐藏指针被认为是不好的做法。
复制li
时,只将指针复制到列表中,这意味着您还可以更改li
所指向的数据。