无法修改作为参数传递给函数的指针变量

我有这个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; }