c将指针传递给递归函数

标签 c pointers memory-leaks recursion

所以我在这个程序上苦苦挣扎,我试图找出如何使用 在递归函数中声明到 main 中的指针数组以存储数据,问题是 这里出现的是,如果它与单个指针的方法相同,那么对于结构类型呢? 将变量/数组通过引用传递给递归函数的最佳方法是什么?

#include <stdio.h>
#include <stdlib.h>
#define N 1

void f(int i,int j,int *cnt);

int j=0;

int main(int argc, char *argv[])
{
  int *cnt=0;
  f(0,++j,&cnt);
  printf("------ %d ---- \n",cnt);
  system("PAUSE");  
  return 0;
}

void f(int i,int j,int *cnt){

   if(i>N){
          printf("---if --- %d ---- %d \n",i,j);
          (*cnt)++;
          return;
          }

   (*cnt)++;
   printf("---bg --- %d ---- %d \n",i,j);
   f(i+1,++j,cnt);
   f(i+1,++j,cnt);        
}

我想知道的另一件事是递归函数如何处理++i 和 i++ 以及 i+1 增量(当作为参数传递时),

最佳答案

int main(int argc, char *argv[])
{
    int *cnt=0;
    f(0,++j,&cnt);
    printf("------ %d ---- \n",(*cnt));
    system("PAUSE");  
    return 0;
}

需要

int main(int argc, char *argv[])
{
    int intStorage = 0;//<---- As Oli said.
    int *cnt= &intStorage;
    f(0,++j,cnt);//<-------AMPERSAND removed, overly dereferenced.
    printf("------ %d ---- \n",(*cnt));
    system("PAUSE");  
    return 0;
}

++i 和 i++ 和 i+1(当作为参数传递时):

  1. ++i: i + 1 传过去了,也是i之后取的值。
  2. i++:i被传递,调用后i = i + 1。
  3. i+1:i + 1 已通过,但之后 i 仍保持原样。

我也会尝试稍微修复一下您的功能:

void f(int i,int j,int *cnt){

    if(i>N){
        printf("---if --- %d ---- %d \n",i,j);
        return;
    }

    (*cnt)++;
    printf("---bg --- %d ---- %d \n",i,j);
    if ( i < 50 && j < 50 ) {
        f(i+1,++j,cnt);
        f(i+1,++j,cnt);
    }
}

仍然有很多递归,但没有不停止的危险。

关于c将指针传递给递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9072971/

相关文章:

c++ - Qt 每秒更新一次值

c - golang 对共享内存的支持

pointers - 将未初始化的指针分配给指向操作系统存储位置的对象会破坏计算机或使其崩溃吗?

指向函数原型(prototype)中 srtuct 中 const 的 const 指针

memory-leaks - Dart Websocket内存泄漏

javascript - Google Maps JS v3 - 分离的 DOM 树 - 内存泄漏?

使用宏连接嵌套字符串

c - 尝试使用 execle 时预期参数声明符错误

C++ 指针和引用说明

javascript - Node.js 性能和内存泄漏