C++ 引用

Reference(引用)

1. 引用的定义

引用就是另一个变量的别名

2. 声明引用变量的方法

int x;
int&  rx = x;
int x, &rx = x;

3. 引用的性质(非常重要)

  • 通过引用所做的读写操作实际上是作用于原变量

  •  引用必须在声明的时候初始化。

  • 引用一旦初始化,引用名字就不能再指定给其它变量

4. 引用类型做函数的参数:引用传递

  • (引用可做函数参数,但调用时只需传普通变量即可)

  • (在被调函数中改变引用变量的值,则改变的是实参的值)

5. 例子

5.1.       例1:通过值传参

//pass by value
void swap(int x,  int y){
  int  t;
  t=x;  x=y;  y=t;
}
int main() {
  int a=5, b{10};
  cout << "Before: a=" << a << " b=" << b << endl;
  swap( a,  b );
  cout << "After:  a=" << a << "b=" << b << endl;
  return 0;
}
View Code

输出结果:

Before: a=5 b=10

After:  a=5 b=10

  

5.2.       例2:通过指针传参 

//pass by pointer
void swap(int* x,  int* y){
  int  t;
  t=*x;  *x=*y;  *y=t;
}
int main() {
  auto a{5}, b{10};
  cout<< "Before: a=" << a << " b=" << b << endl;
  swap( &a,  &b );
  cout<< "After: a=" << a << "b=" << b << endl;
  return 0;
}
View Code

输出结果:

Before: a=5 b=10

After:  a=10 b=5

5.3.       例3:通过引用传参

//pass by reference
void swap(int& x,  int& y){
  int  t;
  t=x;  x=y;  y=t;
}
int main() {
  auto a{5}, b{10};
  cout<< "Before: a=" << a << " b=" << b << endl;
  swap( a,  b );
  cout << "After: a=" << a << "b=" << b << endl;
  return 0;
}
 

 

 
View Code

输出结果:

Before: a=5 b=10

After:  a=10 b=5

# include <iostream>
using std::cout;
using std::cin;
using std::endl;
void swap1(int, int);
void swap2(int*, int*);
void swap3(int&, int&);
int main(){
    int x1{ 10 }, y1{ 5 };
    cout << "通过值传递" << endl;
    cout << "Before a:" << x1 << "	Before b:" << y1 << endl;
    swap1(x1, y1);
    cout << "After a:" << x1 << "	After b:" << y1 << endl;

    cout << "通过指针传递" << endl;
    cout << "Before a:" << x1 << "	Before b:" << y1 << endl;
    swap2(&x1, &y1);
    cout << "After a:" << x1 << "	After b:" << y1 << endl;

    cout << "通过引用传递" << endl;
    cout << "Before a:" << x1 << "	Before b:" << y1 << endl;
    swap3(x1, y1);
    cout << "After a:" << x1 << "	After b:" << y1 << endl;


    system("pause");
    return 0;
}

void swap1(int a, int b) {
    int t=0;
    a = t; t = b; b = a;    
}

void swap2(int* a, int* b) {
    int t;
    t = *a; *a = *b; *b = t;
}

void swap3(int& a, int& b) {
    int t;
    t = a; a = b; b = t;
}
View Code

6. 引用的性质的补充说明

int a { 0 }, b { 1 };
int& r { a };  // 引用变量 r 在声明的同时就要初始化,r是a的别名
  
r = 42;  // 相当于 a = 42
r = b;   // 相当于 a = b; 执行后 a 的值是1
         // 此处不是让r变成b的引用
         // 引用r声明并初始化后,r就不能再改为其它变量的引用
int& r2 = a;  // 继续给a起别名
int& r3 = r;  // 声明引用变量 r3,用r初始化
              // 这个相当于 int& r3 = a; 因为 r 是 a 的别名
View Code

7. 常量指针引用

# include <iostream>

int main(){
    const char* x = "Hello";  //Hello为常量,应用常量指针
    const char* y = "Aloha"; 
    const char*& rx = x;      //声明是就得指向
    std::cout << x << std::endl;
    rx = "Hello World";
    std::cout << x << std::endl;
    rx = y;                   //这里不是对y的引用,而是赋值,所以x改变
    std::cout << x << std::endl;    
    system("pause");
    return 0;
}
View Code

原文地址:https://www.cnblogs.com/zgqcn/p/11321759.html