使用创建节点作为C中链接列表中结构类型的指针?

时间:2016-04-10 07:52:06

标签: c

如果我已经创建了一个数据结构名称节点,那么这意味着我创建了一个带有int变量的数据结构和一个指向另一个节点的存储地址的指针。但是,为什么我们将temptemp1start声明为节点*start*temp*temp1而不是节点*starttemptemp1

由于temptemp1稍后在程序中用作临时“NODES”,并将它们声明为指向结构节点的指针不应使其正常工作,但此节点*temp和{{ 1}}有效。为什么呢?

简而言之,为什么这些*temp1temp被声明为结构的指针而不是节点temp1temp以及为什么它们正在工作(即节点{{1} },temp1)?

1 个答案:

答案 0 :(得分:0)

基于假设/猜测,因为您的问题中没有可用的代码。

例如,如果您正在创建像这样的链接列表,

struct node {
    int value;
    struct node *link;
};

如果您正在使用struct node temp, temp2,那么它会创建两个结构变量temptemp2,其内存大小等于结构中所有成员的内存大小int + struct node *

如果您使用的是struct node *temp, *temp2,那么它会创建两个指向struct node变量的指针。由于指针只需指向内存位置,因此将消耗更少的内存。

所以,如果你喜欢,

struct node start;
start.value = 10;
start.link = 2000; //hypothetically for example, address should be in hex
struct node temp = start;
temp.value = 20; // Will change only value to 20 for temp variable only

然后start的所有成员的值将被复制到temp成员中。单独记忆starttemp变量。

如果你喜欢,

struct node start;
start.value = 10;
start.link = 2000;
struct node *temp = &start;
temp->value = 20; //Will change value to 20 for both temp and start. As temp is pointer not a separate variable.

然后temp指针变量指向start位置。