所以我在这个程序上苦苦挣扎,我试图找出如何使用 在递归函数中声明到 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(当作为参数传递时):
- ++i: i + 1 传过去了,也是i之后取的值。
- i++:i被传递,调用后i = i + 1。
- 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/