C++ [基础] 引用类型和值类型。

165 阅读2分钟

看2个函数的参数: nums

  • 引用类型
/**
 * 
 * @param nums   引用类型
 * @return 
 */
vector<vector<int>> threeSum2(vector<int> &nums) {
    

}

  • 值类型
/**
 * 
 * @param nums  值类型
 * @return 
 */
vector<vector<int>> threeSum3(vector<int> nums) {

}
  • 指针类型
/**
 *
 * @param nums  指针类型
 * @return
 */
vector<vector<int>> threeSum4(vector<int> *nums) {

}

讲讲区别

引用类型

  • &nums 表示传递的参数是一个指向 vector 类型对象的引用。这意味着在函数内部修改 nums 将会影响传递进来的原始 vector 对象。

重点:将会影响传递进来的原始 vector 对象。

值类型

  • nums 表示传递的参数是 vector 类型的一个拷贝。这意味着在函数内部对 nums 的任何修改都不会影响原始的 vector 对象,因为修改的是拷贝。

重点:函数内部对 nums 的任何修改都不会影响原始的 vector 对象,因为修改的是拷贝。

指针类型

  • nums 表示传递的参数是一个指向 vector 类型对象的指针。这意味着在函数内部对 *nums 的任何修改都会影响传递进来的原始 vector 对象,因为修改的是指针所指向的对象。

    重点和 引用一样。

Note

  • 指针类型和引用类型,有些类似,但是在功能上还是有些区别,使用指针,还是使用引用,出于 “打工人”是什么目的;

指针和引用在功能上的区别

  1. 定义方式:引用类型使用 & 符号定义,指针类型使用 * 符号定义。
  2. 空指针:引用类型不存在空引用,而指针类型可以存在空指针。
  3. 初始化:引用类型必须在定义时进行初始化,而指针类型可以在定义时不进行初始化。
  4. 内部实现:引用类型实际上是一个指针常量,它在定义时就被初始化为指向某个对象的指针,并且不能再指向其他对象;而指针类型是一个变量,它可以被重新赋值指向其他对象。
  5. 直接操作:可以直接操作指针类型,如对指针进行算术运算,但不能直接操作引用类型。
  6. 安全性:引用类型不会出现空指针,因此可以避免许多指针操作中的错误,而指针类型可能存在空指针,需要在使用时进行判断,否则可能会出现指针悬空等错误。

说白了

指针比引用灵活

指针比引用坑多

引用比指针安全

大佬都用指针