跳到主要内容

简述什么情况用指针当参数,什么时候用引用,为什么 ?

参考答案:

在C++中,指针和引用都可以作为函数的参数,但它们的用法和目的有所不同。以下是关于何时使用指针和何时使用引用的一些指导原则:

使用指针作为参数:

  1. 可修改原始数据:当函数需要修改传入的原始数据时,应该使用指针。这是因为函数内的变量默认是传值的,这意味着它会创建一个新的变量副本而不是直接操作原始数据。使用指针可以绕过这个限制,允许函数直接修改原始数据。
void modifyData(int* ptr) {
    *ptr = 10; // 修改原始数据
}
  1. 处理可选参数:在某些情况下,可能需要传递一个可选参数。通过将指针设置为nullptr,可以指示该参数未提供。
void processData(int* optionalData = nullptr) {
    if (optionalData) {
        // 处理数据
    }
}
  1. 处理大型对象:对于大型对象,传递指针(而不是整个对象)可以减少复制成本。

使用引用作为参数:

  1. 避免复制:当不需要修改原始数据,但又不希望发生复制时,可以使用引用。这可以提高效率,尤其是对于大型对象。
void printData(const int& ref) {
    std::cout << ref << std::endl; // 不修改数据,避免复制
}
  1. 避免nullptr检查:使用引用作为参数可以确保传递给函数的总是有效的对象,从而避免进行nullptr检查。
  2. 更直观的语法:对于函数参数来说,使用引用通常比使用指针更直观和易于理解。

总结:

  • 当需要修改原始数据或处理可选参数时,使用指针。
  • 当需要避免数据复制,并且不需要修改原始数据时,使用引用。

需要注意的是,这两种方法并不是互相排斥的。在某些情况下,可能需要根据具体需求和上下文来选择合适的方法。