首页 > 其他分享 >106.你什么情况用指针当参数,什么时候用引用,为什么?

106.你什么情况用指针当参数,什么时候用引用,为什么?

时间:2023-07-11 15:55:42浏览次数:46  
标签:const 对象 106 引用 使用 数据 指针

106.你什么情况用指针当参数,什么时候用引用,为什么?

1.使用引用参数的主要原因有两个

1.程序员能修改调用函数中的数据对象

2.通过传递引用而不是整个数据–对象,可以提高程序的运行速度

2.一般的原则

1.对于使用引用的值而不做修改的函数:

(1)如果数据对象很小,如内置数据类型或者小型结构,则按照值传递;

(2)如果数据对象是数组,则使用指针(唯一的选择),并且指针声明为指向const的指针;

(3)如果数据对象是较大的结构,则使用const指针或者引用,已提高程序的效率。这样可以节省结构所需的时间和空间;

(4)如果数据对象是类对象,则使用const引用(传递类对象参数的标准方式是按照引用传递);

2.对于修改函数中数据的函数:

(1)如果数据是内置数据类型,则使用指针

就为改变实参这个目的而言,指针对于引用的优势在于当你有可能需要传入一个空的概念*(尚未创立的对象,空指针可以表示,而引用无法表示空的概念)的时候

(2)如果数据对象是结构,则使用引用或者指针

(3)如果数据是类对象,则使用引用

(4)如果数据对象是结构。则使用指针或者引用。

也有一种说法认为:“如果数据对象是数组,则只能使用指针”,这是不对的,比如

template<typename T, int N>
void func(T (&a)[N])
{
    a[0] = 2;
}

int main()
{
    int a[] = { 1, 2, 3 };
    func(a);
    cout << a[0] << endl;
    return 0;
}

参考资料来源:

阿秀

标签:const,对象,106,引用,使用,数据,指针
From: https://www.cnblogs.com/codemagiciant/p/17544959.html

相关文章

  • 74.指针加减计算要注意什么?
    74.指针加减计算要注意什么?指针加减本质是对其所指地址的移动,移动的步长跟指针的类型是有关系的,因此在涉及到指针加减运算需要十分小心,加多或者减多都会导致指针指向一块未知的内存地址,如果再进行操作就会很危险。举个例子:#include<iostream>usingnamespacestd;intmain(......
  • 80.继承机制中对象之间如何转换?指针和引用之间如何转换?
    80.继承机制中对象之间如何转换?指针和引用之间如何转换?1.向上类型转换将派生类指针或引用转换为基类的指针或引用被称为向上类型转换,向上类型转换会自动进行,而且向上类型转换是安全的。2.向下类型转换将基类指针或引用转换为派生类指针或引用被称为向下类型转换,向下类型转换不......
  • 77.C++中的指针参数传递和引用参数传递有什么区别?底层原理你知道吗?
    77.C++中的指针参数传递和引用参数传递有什么区别?底层原理你知道吗?1.指针参数传递本质上是值传递,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开辟内存空间以存放由主调函数传递进来的实参值,从而形成了实参的一个副本(替身)。值传......
  • 82.函数指针?
    82.函数指针?  函数指针指向的是函数而非对象。和其他指针一样,函数指针指向某种特定类型。函数的类型由它的返回类型和形参类型共同决定,与函数名无关。例如://比较两个string对象的长度boollengthCompare(conststring&,conststring&);  该函数的类型是bool(conststri......
  • java级联调用的空指针问题
    Java中的空指针异常(NullPointerException)通常是由于在一个对象引用上调用了空引用的方法或访问了空引用上的实例变量而引起的。当你尝试使用一个空引用时,就会抛出空指针异常。一个常见的情况是在级联调用中出现空指针异常。级联调用是指对一个对象的多个方法调用进行链式操作。例如......
  • Cesium导航指针放大缩小定位平移详解
    一、需求分析点击按钮可以对地图进行放大缩小,点击重置可以返回原先初始地点,点击指针球可以移动切换不同视角。二、代码实现我的版本为Cesium1.69 cesium-navigation-es61.1.6 源码有BUG需要更改安装命令:npm cesium-navigation-es6或者yarnadd npmi cesium-navigation......
  • 双指针思想
    介绍双指针是一种思想,一种技巧或一种方法,并不是什么特别具体的算法,在二分查找等算法中经常用到这个技巧。具体就是用两个变量动态存储两个或多个结点,来方便我们进行一些操作。通常用在线性的数据结构中,比如链表和数组,有时候也会用在图算法中。在我们遇到像数组,链表这类数据结构......
  • 【《C++ Primer 第四版》读书笔记】4.2.5-指针和const限定符
    1.指向const对象的指针1.1表现形式constdouble*ptr,constvoid*ptr1.2如何理解无法通过ptr这个指针变量去修改所指向内存区域的值,但是ptr这种指针变量可以重复赋值,指向不同的内存地址注意ptr这个指针变量赋值时,既可以赋值为const类型变量(书中所说的const对象)的地址,也......
  • rust 自动化测试、迭代器与闭包、智能指针、无畏并发
    编写测试可以让我们的代码在后续迭代过程中不出现功能性缺陷问题;理解迭代器、闭包的函数式编程特性;Box<T>智能指针在堆上存储数据,Rc<T>智能指针开启多所有权模式等;理解并发,如何安全的使用线程,共享数据。自动化测试编写测试以方便我们在后续的迭代过程中,不会改坏代码。保证了程序......
  • abc309f <线段树 + 离散化 + 双指针>
    F-BoxinBox//https://atcoder.jp/contests/abc309/tasks/abc309_f//<线段树+离散化+双指针>[unique+lower_bound+erase+lambda+vector]//总体思路:将每个三元组记录为如a[3]的3维向量,依次考虑每个向量,检查是否存在一个向量完全比它'小'//将向量按......