对struct

时间:2018-04-09 13:05:06

标签: c struct

我试图了解如何使用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?

我想我真正要问的是,我是否真的复制了结构类型,或者只是创建了另一个引用。有人可以为我澄清这个吗?

2 个答案:

答案 0 :(得分:1)

假设li指向有效的ListNode对象,则

List li1 = li;

创建指针的副本。在上面的定义和初始化之后,你有两个指针(lili1)都指向同一个对象。

如果你想要副本,那么你需要明确地实现它,对于列表来说意味着复制列表中的每个节点。

答案 1 :(得分:1)

  

我想我真正要问的是,我是否真的复制了结构类型,或者只是创建了另一个引用类型。有人可以为我澄清这个吗?

您的类型List不是结构类型,而只是指向结构的指针。 顺便说一句:在typedef中隐藏指针被认为是不好的做法。

复制li时,只将指针复制到列表中,这意味着您还可以更改li所指向的数据。