繁体   English   中英

在 C 中,将结构分配给结构指针是否会分配结构的复制值?

[英]In C, does assigning a struct to a struct pointer assigns a copied value of the struct?

我刚开始学习 C 如果命名不正确,请原谅我。

如果我将一个struct分配给一个struct pointer ,然后更改结构的值,那么当我尝试从struct pointer访问该值时,它不会反映出来。

struct Node_int *new_node_address = (struct Node_int *) malloc(sizeof(struct Node_int));
struct Node_int new_node_instance;
*new_node_address = new_node_instance;
new_node_instance.data = data;
new_node_instance.next= NULL;
printf("%d", new_node_address->data)

这里printf("%d", new_node_address->data)将返回一个垃圾值,但以下代码中的相同打印语句将返回正确/分配的数据。

struct Node_int *new_node_address = (struct Node_int *) malloc(sizeof(struct Node_int));
struct Node_int new_node_instance;
new_node_instance.data = data;
new_node_instance.next= NULL;
*new_node_address = new_node_instance;
printf("%d", new_node_address->data)

我想了解为什么会这样。 *new_node_address是否获取new_node_instance中 new_node_instance 的复制值?

我想了解为什么会这样。 *new_node_address是否获取new_node_instance中 new_node_instance 的复制值?

是的,有一个副本,取消引用运算符*表示您正在将数据复制到 new_node_address 指向的new_node_address地址。 这是 malloc 返回的malloc块。

如果你想让指针指向声明的new_node_instance的地址,你需要:

new_node_address = &new_node_instance;

在这种情况下,不会发生复制,因此您也不需要分配 memory,您正在使指针指向一个已经具有 memory 存储的变量。

第二个代码片段有效的原因是因为您在分配数据后制作副本,而不是第一个代码片段。

对于初学者来说,似乎有一个错字

new_node_instance.data = data;
new_node_instance.data= NULL;

那就是使用了相同的数据成员data 似乎第二个数据成员被命名为nextlink

如果我将一个结构分配给一个结构指针,然后更改结构的值,那么当我尝试从结构指针访问该值时,它不会反映出来。

这是因为指针指向另一个单独的 object,它是动态分配的。

您首先需要将值分配给 object new_node_instance ,然后将结构类型的 object 分配给动态分配的 object 例如

new_node_instance.data = data;
new_node_instance.next = NULL;

*new_node_address = new_node_instance;

或者

struct Node_int new_node_instance = { .data = data, .next = NULL };
*new_node_address = new_node_instance;

即在分配结构类型的对象时,数据成员的值被复制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM