2012-10-19 21:48 (分类:计算机程序)
写的这些是在给学弟学妹讲解时自己更深层次的理解,为别人解惑,思考过程中自己也有新的认识。
更重要的,这些或许是将来某天我要放弃这行时,最后坚持的理由——曾经热爱过的理想。
一 、
int a=3,b=4;
void f(int x,int y)
{
int temp;
temp=a;a=b;b=temp; //试图交换a,b
}
f(a,b);
cout<<a<<" "<<b<<endl;
结果为 3、4
a和b的值都没有改变,只是将值传递给形参x、y,在被调函数内部使用,函数外无影响。
二 、若要使a、b值发生改变如下
void f(int *x,int *y)
{
int temp;
temp=*x;*x=*y;*y=temp;
}
f(&a,&b);
cout<<a<<" "<<b<<endl;
结果 为 4、3
三、还应注意
#include<iostream>
using namespace std;
void f(int *p)
{
int a=3;
p=&a; // 注意
}
int main()
{
int x=4;
int *p1=&x;
f(p1);
cout<<*p1<<endl;
return 0;
}
输出的结果是4,指针p1调用f函数后值并没有得到改变;p=&a 称之为 给指针赋值,
意思是给指针本身一个指向的对象;p=&a是相当于把函数的形参指针p指向a(即给指针赋值,此值是a的地址),但由于a是临时变量,函数调用完后即不存在了,所以实参p1是不会被改变的,*p1=4
#include<iostream>
using namespace std;
void f(int *p)
...{
int a=3;
*p=a; //不同之处
}
int main()
...{
int x=4;
int *p1=&x;
f(p1);
cout<<*p1<<endl;
return 0;
}
输出结果是3,指针p1在调用f函数后得到改变;*p=a称之为 通过指针进行赋值,
意思是改变指针所指对象的值;*p=a就不同了,函数是值传递,实参p1传递给形参p的值是什么呢?当然是x的地址,也就是说,在函数f调用的过程中,形参指针p指向了x,然后进行的*p=a是通过指针进行赋值,改变了p指向的对象x,p1仍然指向x,故*p1=3
四、引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。特别强调的是引用并不产生对象的副本,仅仅是对象的同义词
void f(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
f(x,y)
f(x,y) c++自动把x,y的地址作为参数传递给f函数@王猛@关键@李宁