读书人

一个传递有关问题

发布时间: 2013-01-01 14:04:19 作者: rapoo

一个传递问题
下面这个程序是个简单的传递
========
#include "stdafx.h"
#include "iostream"
using namespace std;
int x=5;
int y=6;


void add(int x,int y){
x+=5;
y+=6;
cout<< "mid :x="<<x<<",y="<<y<<endl;
}

void main(){

cout<< "before :x="<<x<<",y="<<y<<endl;
add(x,y);
cout<< "after:x="<<x<<",y="<<y<<endl;
}
==
因为传值的缘故,所以add(x,y)没有影响最终的结果。

before :x=5,y=6
mid :x=10,y=12
after:x=5,y=6

但是如果我把void add(int x,int y)这句改为void add(int i,int j),不改变其他地方,结果变成了

before :x=5,y=6
mid :x=10,y=12
after:x=10,y=12

为什么这样改过之后就会改变最终的结果呢?
[解决办法]
void add(int x,int y);你输出的mid,只是函数体内的x,y,并非全局变量的xy。
void add(int i,int j), 函数内操纵的是 全局变量的xy 。
变量名字最好不要一样.. 会发生奇怪错误
[解决办法]
想改变实参的值 ,传入引用


void add(int &x,int &y){
x+=5;
y+=6;
cout<< "mid :x="<<x<<",y="<<y<<endl;
}

[解决办法]
未改之前操作的是形参,改变之后操作的是全局变量

读书人网 >C++

热点推荐