假设我有一个这样的结构..
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_element
和 print_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/