我在 C 中有一个递归函数,我希望返回的结构指针成为函数中的新结构。我对返回的结构有问题,因为它没有改变。这是我的代码结构:
struct location_t{
int x,y;
location_t * next;
int dir;
}
location_t * recursive_foo(location_t * loc, maze_t * m){
int x = loc->x;
int y = loc->y;
int dir = loc->dir;
loc->next = malloc(sizeof(location_t));
location_t * temp = loc->next;
if(m->map[--x][y] != '#' && dir != 0){
temp->x = x;
temp->y = y;
temp->dir = 2;
loc = recursive_foo(temp);
}
if(m->map[--x][y] != '#' && dir != 1){
temp->x = x;
temp->y = y;
temp->dir = 3;
loc = recursive_foo(temp);
}
if(m->map[--x][y] != '#' && dir != 2){
temp->x = x;
temp->y = y;
temp->dir = 0;
loc = recursive_foo(temp);
}
if(m->map[--x][y] != '#' && dir != 3){
temp->x = x;
temp->y = y;
temp->dir = 1;
loc = recursive_foo(temp);
}
return loc;
}
我对返回的结构有疑问,因为它没有改变。
它的目的是通过相互引用来堆叠这些结构。
最佳答案
mystruct
是一个堆栈变量。换句话说,您是按值传递指针,而不是按引用传递指针。
你现在所做的基本上是一样的:
int f(int i) {
...
i = <any value>;
...
}
在这种情况下,您只修改值的副本。
在您的程序中,您还修改了指针的副本。在函数之外,指针保持不变。
如果要修改它,需要传递一个指向它的指针:
location_t * recursive_foo(location_t** loc, maze_t * m){
int x = (*loc)->x;
int y = (*loc)->y;
int dir = (*loc)->dir;
...
*loc = recursive_foo(&temp);
...
return *loc;
}
关于c - 我如何更改函数中的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15597629/