无法修改作为参数传递给函数的指针变量
我有这个function
int rt_exist(struct route_entry* prev_rte) { prev_rte = rte_head; //This doen't assigns rte_head to prev_rte return 0; }
其中rte_head是初始化的struct route_entry *指针变量。 但在上述情况下,“prev_rte”未分配rte_head的值。
顺便说一下,如果我这样做的话
int rt_exist(struct route_entry* prev_rte) { struct route_entry* rte_new; rte_new = rte_head; //But this can return 0; }
上述分配顺利进行。 当指针变量作为函数参数传递时会出现问题。
这是一个奇怪的问题,细节很少,但是有人能指出我可能的方向或我可能做错的事情。
考虑一下:
void foo (int j) { j = 7; } foo (8);
你期望在这里发生什么? 函数不能以这种方式更改调用者中的值。
这里应该发生什么:
rt_exist (NULL);
对于C ++,您可以使用引用:
int rt_exist(struct route_entry*& prev_rte) { prev_rte = rte_head; //This doen't assigns rte_head to prev_rte return 0; }
对于C,您需要传递指向要更改的内容的指针:
int rt_exist(struct route_entry** prev_rte_ptr) { *prev_rte_ptr = rte_head; //This doen't assigns rte_head to prev_rte return 0; }
是! 在第一种情况下,您正在使用堆栈的临时部分。 但在第二种情况下,您正在使用分配。 这意味着您正在使用来自堆的一部分内存。 这显然会影响价值。 这就像新块中的新变量。 在此范围内,它将具有指定的值。
但是在rt_exist中传递了变量的副本。 因此,任何改变都不会影响实际的改变。 但你可以传递它的地址并像这样轻松地改变它。
int rt_exist(struct route_entry** prev_rte) { *prev_rte = rte_head; //This does assign rte_head to prev_rte. return 0; }