看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
- 指针类型和引用类型,有些类似,但是在功能上还是有些区别,使用指针,还是使用引用,出于 “打工人”是什么目的;
指针和引用在功能上的区别
- 定义方式:引用类型使用 & 符号定义,指针类型使用 * 符号定义。
- 空指针:引用类型不存在空引用,而指针类型可以存在空指针。
- 初始化:引用类型必须在定义时进行初始化,而指针类型可以在定义时不进行初始化。
- 内部实现:引用类型实际上是一个指针常量,它在定义时就被初始化为指向某个对象的指针,并且不能再指向其他对象;而指针类型是一个变量,它可以被重新赋值指向其他对象。
- 直接操作:可以直接操作指针类型,如对指针进行算术运算,但不能直接操作引用类型。
- 安全性:引用类型不会出现空指针,因此可以避免许多指针操作中的错误,而指针类型可能存在空指针,需要在使用时进行判断,否则可能会出现指针悬空等错误。
说白了
指针比引用灵活
指针比引用坑多
引用比指针安全
大佬都用指针