c - 结构值传递

标签 c structure

假设我有一个这样的结构..

struct object{
     int id;
     char *name;
     node *list_head; //a pointer to the head of a linked list
};

typedef struct object object;

我静态声明了一个结构变量。我必须将其按值传递给一个函数,该函数将一个元素插入到 temp_obj 中的列表中,如下所示。

我们可以假设 add_elementprint_list 函数工作正常。 如果我在 function_a 之后打印列表,那么它不会打印插入的元素。 我认为这是因为我将结构作为值传递,所以在 function_a 中所做的更改不会反射(reflect)到在 function_a 之前声明的结构。

但是由于给定的接口(interface),我必须按值传递结构。 在这种情况下,我该怎么做才能反射(reflect)对原始结构的更改?

object temp_obj
function_a(temp_obj);
print_list(temp_obj.list_head);

void function_a(object obj){
    //add an element to the list
    int num = 1;
    add_element(&obj.list_head, num);
}

最佳答案

你完蛋了!

如果你不能改变接口(interface),那么就没有办法让“按值传递”表现得像“按引用传递”。

您的选择是更改接口(interface)以获取 object * 或使函数返回 object(或 object*)- 所有这些选项需要更改界面。

关于c - 结构值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13506062/

相关文章:

c# - 结构布局优化

php - Facebook-wall like MySQL结构问题

使用指针在结构内创建一个可变长度的 int 数组

c - 在 C 运行时与命令行程序交互(stdin/out)

c - 在用C编写代码时错误: expected an identifier while defining enum

c - WIN32 内存宏与 cstring 内存操作之间的区别?

C99 结构指定初始化器和其他值

c - 使用 OpenMP 和 C 的并行化功能

c - 为什么 clang 提示使用带有 '-std=c99' 标志的可变长度数组?

c - 在结构内部,如何定义与结构本身类型相同的结构数组(动态)