胡歌王晓晨的综艺节目:关于一个C++程序

来源:百度文库 编辑:高考问答 时间:2024/04/30 03:14:04
请看以下程序:
#include<iostream.h>
void f1(int *&j)//&加与不加有区别
{
int l =20;
int *k = &l;
j =k;
k=0;
}
void any_function_use_local_variables()
{
int a,b,c;
a=b=c=100;
}
void main()
{
int i=10;
int *j=&i;
f1(j);
cout<<*j<<endl;
any_function_use_local_variables();
cout<<*j<<endl;

}
小弟初学C++,很多地方搞不明白望高手指教。
运行结果:20 100
我认为在void f1(int *&j)中,j指向了k及所指向的内存,跳出该函数时,j还在生存期,故该内存并没释放,所以结果会运行得到20。但执行any_function_use_local_variables();后,j指向的内存值却变为100,我始终不明白,在any_function_use_local_variables()中a b c毕竟与j八杆子打不到边呀!!!怎莫a b c会影响到j!!!高手请解释!!
另外,我将void f1(int *&j)中的&去掉,结果变为10 10。我修改后想在
void f1(int *j)中,指针j的副本虽被k覆盖但在主函数中指针j并没变化,故结果为10。而在any_function_use_local_variables()中a b c与j八杆子打不到边。结果为10我觉得并不奇怪。这与修改前运行结果不同的原因我就搞不明白。请高手指点!!
对于void f1(int *&j)中的int *&j意思我不是太明白,请大虾们顺便讲一下!
先谢了!!!!!!!!!!!!!!!!!!!!!!!

先给你解释一下有 & 这个和没有的区别

首先看这段代码
void f1(int *&j)
{
int l =20;
int *k = &l;
j =k;
k=0;
}
void main()
{
int i=10;
int *j=&i;
f1(j);
cout<<*j<<endl;
执行后的结果是 20
当去掉&时
代码如下
void f1(int *j)
{
int l =20;
int *k = &l;
j =k;
k=0;
}
void main()
{
int i=10;
int *j=&i;
f1(j);
cout<<*j<<endl;
执行结果为10
原因是这样:
在main 中 我们掉用了函数f1 传的参数是j,当是void f1(int *&j)的时候
我们传进去的是地址,操做好比对一个单独的j进行了操作
一开始在主函数中赋给f的值被f1中的值所替代
所以结果为20
当遇到的是void f1(int *j) 的时候
我们传进去的是参数,即我们只是传一个参数进去 然后执行f1函数里的过程
当过程结束 得到了释放 也就没有影响到j的变化
j的值还是在主函数中由i赋的值 即10
所以结果也是10

----------------
至于这个void any_function_use_local_variables() 函数

我们在主函数中调用了一次
当我们用// 把主函数中调用的代码 屏蔽掉
在执行
看到的结果为
20
419800 (一个很大的数)
所以 这说明当你打上两次cout<<*j<<endl;这个的时候
只有一个响应了 而另一个只是产生了一个随机的一个数
所以当我们在主函数中调用any_function_use_local_variables(); 的时候
系统会把 a b c的值赋给j(个人感觉)
这个现象 当我们设置断点进行单步执行的时候 就会发现j的值还是419800
只是在输出的时候 j的指针指向了100
导致结果为100