传值传地址和传引用的小结或者笔记
程序的目的是在改变两个指向整形的指针的指向,也就是在改变指针的值
见代码:
#include <iostream>
using namespace std;
void swap1(int *x,int *y){
//传递的是指针的值,形参和实参并不是同一个对象
//交换的是形参(两个指针)的值,实参中两个指针的指向并没有发生改变
int *tmp;
tmp=x;
x=y;
y=tmp;
}
void swap2(int *&x,int *&y){
//传递的是指针的引用(真正的以地址的方式传递参数),形参和实参都是同一个指针
//交换指针的值,两个指针的指向交换了
int *tmp;
tmp=x;
x=y;
y=tmp;
}
void swap3(int **x,int **y){
//传递的是指针的地址,形参和实参都是同一个指针的地址
//“*指针的地址”为指针的值,交换指针的值,两个指针的指向交换了
int *tmp;
tmp=*x;
*x=*y;
*y=tmp;
}
int main(){
//实验目的就是交换指针的值
//输入:p1指向a,p2指向b
//输出:p1指向b,p2指向a
//传值:把实参的值赋给形参,对形参的修改不会影响到实参的值
//传引用:形参和实参是同一个对象,只是他们的名字不同,对形参的修改将会影响到实参
//传地址:形参和实参是同一个对象
int a=1;
int b=2;
int *p1=&a;
int *p2=&b;
cout<<" 传值前"<<"a: "<<*p1<<" b: "<<*p2;
swap1(p1,p2);
cout<<"--- 传值后"<<"a: "<<*p1<<" b: "<<*p2<<endl;
cout<<"传引用前"<<"a: "<<*p1<<" b: "<<*p2;
swap2(p1,p2);
cout<<"---传引用后"<<"a: "<<*p1<<" b: "<<*p2<<endl;
cout<<"传地址前"<<"a: "<<*p1<<" b: "<<*p2;
swap3(&p1,&p2);
cout<<"---传地址后"<<"a: "<<*p1<<" b: "<<*p2<<endl;
return 0;
}