c - 我如何更改函数中的指针?

标签 c pointers recursion

我在 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/

相关文章:

c - 如何在C中找到除法的余数?

c - c w/h 终端命令 : ./process arg | 中的管道./进程参数

c - 函数内部的指针变量指向栈还是堆?

java - 我如何在 java 中创建对象的副本,而不是指针

c# - 为什么这里没有发生尾调用优化?

ruby - 递归数组有什么用?

c - 我如何决定使用较小的字体?

c - 在这种特殊情况下,静态数组慢 700 倍是否合理?

c - 简单的字符串计数器程序调试(指针)

C - 从递归返回后指针值发生变化