如下c++程序,分析运行结果,谢谢。

来源:百度知道 编辑:UC知道 时间:2024/06/18 05:51:46
#include <iostream>
using namespace std;
void f1(int I) {I+=10;}
void f2(int *I) {I+=20;}
void f3(int &n) {n+=30;}
void main ()
{
int I=0;
f1(I);
cout<<"I is "<<I<<endl;
f2(&I);
cout<<"I is "<<I<<endl;
f3(I);
cout<<"I is "<<I<<endl;
}

分析运行结果,我感觉答案不对呀,答案怎么是:0 20 50

f2应该改为void f2(int *I) {*I += 20;},结果才是:0 20 50;否则按照原来的就会是:0 0 30

函数调用时要注意传参,是实参还是形参;引用&和指针*都可以改变外部的值。

首先你要理解形参和实参的概念。。。
f1(I);是不能改变外部的值得
void f3(int &n) {n+=30;}采用引用可以改变外部的值
void f2(int *I) {I+=20;}采用指针也可以

在函数体内,变量时在栈中分配的,函数结束的时候变量会被操作系统所摧毁。。

答案是0 0 30

f2只是对指针进行移动

原题可能为*I+=20

答案是对的
因为第一个是传值参数调用,在函数调用的同时,I 在子函数的内部创建了一个拷贝,而子函数里面的操作只影响到这个拷贝而没有影响传入参数本身。
第二个是传指针调用,函数调用的时候改变了指针指向的变量的内容,也就改变了指向的变量的值,操作生效。
第三个是引用传参,参数 I 在传入子函数的时候并没有产生拷贝,修改该子函数内参数也就等同于修改外部参数。