如果我已经创建了一个数据结构名称节点,那么这意味着我创建了一个带有int
变量的数据结构和一个指向另一个节点的存储地址的指针。但是,为什么我们将temp
,temp1
和start
声明为节点*start
,*temp
,*temp1
而不是节点*start
,temp
,temp1
?
由于temp
和temp1
稍后在程序中用作临时“NODES”,并将它们声明为指向结构节点的指针不应使其正常工作,但此节点*temp
和{{ 1}}有效。为什么呢?
简而言之,为什么这些*temp1
和temp
被声明为结构的指针而不是节点temp1
,temp
以及为什么它们正在工作(即节点{{1} },temp1
)?
答案 0 :(得分:0)
基于假设/猜测,因为您的问题中没有可用的代码。
例如,如果您正在创建像这样的链接列表,
struct node {
int value;
struct node *link;
};
如果您正在使用struct node temp, temp2
,那么它会创建两个结构变量temp
和temp2
,其内存大小等于结构中所有成员的内存大小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
成员中。单独记忆start
和temp
变量。
如果你喜欢,
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
位置。