我有这个功能
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;
}
以上分配顺利进行。当指针变量作为函数参数传递时会出现问题。
这是一个奇怪的问题,细节很少,但有人可能会指出我可能的方向或我可能做错的事情。
答案 0 :(得分:8)
考虑一下:
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;
}
答案 1 :(得分:2)
是的!在第一种情况下,您正在使用堆栈的临时部分。但在第二种情况下,您正在使用分配。这意味着您正在使用来自堆的一部分内存。这显然会影响价值。这就像新块中的新变量。在此范围内,它将具有指定的值。
但是在rt_exist中传递了变量的副本。因此,任何改变都不会影响实际的改变。但是你可以传递它的地址并像这样轻松地改变它。
int rt_exist(struct route_entry** prev_rte)
{
*prev_rte = rte_head; //This does assign rte_head to prev_rte.
return 0;
}