C++ 引用

引用

int& ref_a {a},声明引用 ref_a

  • 引用作为一个变量的别名
  • 使用是无需解引用运算符
  • 不能为空
  • 避免值的复制,减少开销
  • 常量引用避免引用指向的变量被修改 const int& param
  • 主要用于函数参数传递和函数返回值,使得函数能够直接修改调用者提供的值
1
2
3
4
5
void ref() {
auto nn {123};
auto& ref_n {nn};
cout << "reference:" << ref_n << endl; // reference: 123
}

指针

int* pointer_a {1}, 声明指针 pointer_a

  • 指针直接存储变量的内存地址

  • 直接表现为 16 进制数字,进行四则运算表示地址的偏移

    • ```c++
      // 加法运算
      int arr[5] = {1, 2, 3, 4, 5};
      int* ptr = arr;
      ptr = ptr + 2; // 移动两个整数的位置,即 arr[2]
      1
      2
      3
      4
      5
      6

      - ```c++
      // 减法
      int arr[5] = {1, 2, 3, 4, 5};
      int* ptr = &arr[4];
      ptr = ptr - 2; // 移动两个整数的位置,即 arr[2]
  • 可以为空 nullptr

  • &操作符是取地址运算符,用于获取变量在内存中的地址

  • *是解引用运算符,用于找到指针所指向的内存的具体内容,*pointerA = *pointerA + 1;语句的作用就是修改了这块内存的内容

  • 可以指向栈上的地址

  • 可以指向堆上的地址

1
2
3
4
5
6
7
8
9
10
11
void pointer() {
int* pointerB { nullptr };
cout << pointerB << endl; // 0x0
int a = 1;
int* pointerA { &a };
cout << pointerA << endl; // ...
cout << *pointerA << endl; //1
*pointerA = *pointerA + 1;
cout << *pointerA << endl; //2
cout << a << endl; //2
}
作者

大下坡

发布于

2023-11-08

更新于

2023-11-08

许可协议