#include<stdio.h>
#include<conio.h>
int f(int & ,int );//function prototype
main()
{
int x,p=5; //p is initialized to 5
x=f(p,p);
printf("\n Value is : %d",x);//print the value of x
getch();
}
int f (int & x, int c)
{
c=c-1;
if (c==0) return 1;
x=x+1;
return f(x,c) * x; //recursion
}
产出: 6561
有人能解释一下我的程序流程吗?这个问题是从门开始的,我听不懂。这个函数似乎是以p= 5的值调用的。它是在函数f中用int &x表示的,问题就在这里。值i.e 5存储在x或x的地址中。
发布于 2013-02-11 10:21:29
这段代码使用C++,这就是int &
语法的意思。
引用基本上是指针的句法糖。因此,在调用f(p, p)
时,函数参数x
是main()
中对p
的引用,而c
只是调用时值的副本。
这意味着f
可以通过引用在main()
中更改p
的值。因为f
递归地调用自己,将相同的引用传递给自己,所以它始终是对main()
中的p
的引用。
为了追踪回溯,我建议在f()
内部的战略位置添加登录打印。
发布于 2013-02-11 10:22:25
第一个是创建一个reference
,它更像是一个更干净的语法,而不是一个指针。
您可以使用它在函数调用中更改变量的内容。
尽管您必须注意,您发布的代码是无效的C++。C++不允许没有返回类型的main
。
发布于 2013-02-11 10:29:47
更简单:
int f(int &a){
a = 5;
}
int x = 0;
f(x);
//now x equals 5
int f2(int b){
b = 5;
}
int y = 0;
f2(y);
//y still equals 0
https://stackoverflow.com/questions/14810003
复制相似问题