vc++中引用的问题
#include<iostream.h>intf(int&m){m--;if(m==0)return1;elsereturnm+f(m);}voidmain(void){...
#include <iostream.h>
int f(int& m)
{
m--;
if(m==0) return 1;
else return m+f(m);
}
void main(void)
{
int a=5, b=8;
cout << f(a) << endl;
cout << f(b) << endl;
}
函数中的参数为引用变量&m时,运行的结果是1,1;函数中的参数为m 时,运行结果为11,29.请教各位高手为什么会有上述区别?谢谢啦 展开
int f(int& m)
{
m--;
if(m==0) return 1;
else return m+f(m);
}
void main(void)
{
int a=5, b=8;
cout << f(a) << endl;
cout << f(b) << endl;
}
函数中的参数为引用变量&m时,运行的结果是1,1;函数中的参数为m 时,运行结果为11,29.请教各位高手为什么会有上述区别?谢谢啦 展开
展开全部
引用你可以理解为指针(只是可以这样理解,两者还是有不少的区别)。如果函数的形参为引用,传递时只是使用一块固定的空间,如果不是引用,每次调用子函数,形参就相当于局部变量,每次都会重新开辟空间。
当使用引用时,每次调用 都操作一个固定地址空间下的m,每次m--都是一个m,最后一次递归调用是 f(1),进入后m--(m == 0了),return m+1 = 1
当不使用引用时,每次调用都会为m开辟空间,递归的执行过程如下:
以f(a)为例
f(5) = 4 + f(4)
= 4 + 3 + f(3)
= 4 + 3 + 2 + f(2)
= 4 + 3 + 2 + 1 + f(1)
= 4 + 3 + 2 + 1 + 1
= 11
当使用引用时,每次调用 都操作一个固定地址空间下的m,每次m--都是一个m,最后一次递归调用是 f(1),进入后m--(m == 0了),return m+1 = 1
当不使用引用时,每次调用都会为m开辟空间,递归的执行过程如下:
以f(a)为例
f(5) = 4 + f(4)
= 4 + 3 + f(3)
= 4 + 3 + 2 + f(2)
= 4 + 3 + 2 + 1 + f(1)
= 4 + 3 + 2 + 1 + 1
= 11
展开全部
引用你可以理解为指针(只是可以这样理解,两者还是有不少的区别)。如果函数的形参为引用,传递时只是使用一块固定的空间,如果不是引用,每次调用子函数,形参就相当于局部变量,每次都会重新开辟空间。
当使用引用时,每次调用 都操作一个固定地址空间下的m,每次m--都是一个m,最后一次递归调用是 f(1),进入后m--(m == 0了),return m+1 = 1
当不使用引用时,每次调用都会为m开辟空间,递归的执行过程如下:
以f(a)为例
f(5) = 4 + f(4)
= 4 + 3 + f(3)
= 4 + 3 + 2 + f(2)
= 4 + 3 + 2 + 1 + f(1)
= 4 + 3 + 2 + 1 + 1
= 11
当使用引用时,每次调用 都操作一个固定地址空间下的m,每次m--都是一个m,最后一次递归调用是 f(1),进入后m--(m == 0了),return m+1 = 1
当不使用引用时,每次调用都会为m开辟空间,递归的执行过程如下:
以f(a)为例
f(5) = 4 + f(4)
= 4 + 3 + f(3)
= 4 + 3 + 2 + f(2)
= 4 + 3 + 2 + 1 + f(1)
= 4 + 3 + 2 + 1 + 1
= 11
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有使用引用符号的话, 每次递归后都返回一个迭代的值, 而且外层的不变, 所以值是增大的, 如果使用了引用, 每次递归的时候m的值都减了1, 最终m的值为0, 返回的结果为0+ f(0)也就是1了, 不管参数多大, 得到的结果全是1. 这就是声明为引用的形参改变的话, 实参也会改变.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
引用的操作是对变量本身,
而非引用的传递就像对一个副本进行操作,对原来的变量值,没有影响
而非引用的传递就像对一个副本进行操作,对原来的变量值,没有影响
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询