C++ 核心编程 引用

int main 
引用

 

 

 

 

 


引用做函数的参数
//交换函数
//1、值传递
void mySwap01(int a ,int b)
{
  int temp = a;
  a = b;
  b = temp;
cout <<"Swap01 a="<<a<<endl;
cout <<" Swap01 b="<<b<<endl;

}

int main(){
  int a =10;
  int b=-20 ;
mySwap01(a,b);
cout <<"a="<<a<<endl;
cout <<"b="<<b<<endl;
//输出结果
Swap01 a= 20;
Swap01 b= 10;

a = 10;
b = 20;
//实参并没有发生改变,但是形参确实改变了


}

//2、地址传递
void mySwap02(int *a ,int *b)
{
  int temp = *a;
  *a = *b;
  *b = temp;
}
int main(){
  int a =10;
  int b=-20 ;
mySwap02(&a,&b);//地址传递,形参会修饰实参的
cout <<"a="<<a<<endl;
cout <<"b="<<b<<endl;

//输出结果
a = 20;
b = 10;
//实参并没有发生改变,但是形参确实改变了
}


//3、引用传递
void mySwap03(int &a ,int &b)
{
  int temp = a;
  a = b;
  b = temp;
}
int main(){
  int a =10;
  int b=-20 ;
mySwap03(a,b);//引用传递,形参会修饰实参的
cout <<"a="<<a<<endl;
cout <<"b="<<b<<endl;

//输出结果
a = 20;
b = 10;
//实参并没有发生改变,但是形参确实改变了
}





引用做函数的返回值
1、不要返回局部变量的引用
int& 特刷题(){
  int a=10;
  return a;
}

int main(){
  int &ref = test01;
  cout << "ref=" << ref <<endl;//第一次结果正确,是因为编译器做了保留
  cout << "ref = "<<ref <<erdl;//第二次结果错误,是因为a的内存已经释放
}

2、函数的调用可以作为左值
int& test 02(){
  static int a = 10 ;//静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
  return a;
}
int mian(){
  int &ref2= test02();
cout<<"ref 2=" <<ref2 <<endl;
test02() = 1000;
cout<<"ref 2=" <<ref2 <<endl;//此时值为1000;因为如果函数的返回值是引用,这个函数的调用可以作为左值
}

 

 

 

posted @ 2021-09-14 10:38  健丽  阅读(19)  评论(0编辑  收藏  举报