相关疑难解决方法(0)

C++中指针变量和引用变量之间有什么区别?

我知道引用是语法糖,因此代码更容易读写.

但有什么区别?


以下答案和链接摘要:

  1. 指针可以重新分配任意次数,而在绑定后无法重新分配引用.
  2. 指针可以指向nowhere(NULL),而引用总是指对象.
  3. 您不能使用指针来获取引用的地址.
  4. 没有"参考算术"(但您可以获取引用所指向的对象的地址,并对其进行指针运算&obj + 5).

澄清一个误解:

C++标准非常谨慎,以避免规定编译器如何实现引用,但每个C++编译器都将引用实现为指针.也就是说,声明如下:

int &ri = i;
Run Code Online (Sandbox Code Playgroud)

如果它没有完全优化,则分配与指针相同的存储量,并将地址i放入该存储中.

因此,指针和引用都使用相同数量的内存.

作为基本规则,

  • 使用函数参数和返回类型中的引用来提供有用的自我文档化接口.
  • 使用指针实现算法和数据结构.

有趣的读物:

c++ pointers reference c++-faq

3115
推荐指数
34
解决办法
94万
查看次数

函数调用中*和&运算符的区别

可能重复:
C++ 函数:& 符号与星号 与
参数组合的各种符号(*、& 等)之间有什么区别?

我想知道C++ 函数调用中地址运算符&和引用运算符之间的区别。*例如采用以下函数

void foo (std::string& param)
{
     param = "Bar.";
     std::cout << param.size();
}
Run Code Online (Sandbox Code Playgroud)

让我们在main()函数中这样调用它......

int main()
{
      std::string test;
      foo(test);          //Why not foo(&test)?
      std::cout << test;  //Prints out the value "Bar."
}
Run Code Online (Sandbox Code Playgroud)

首先,为什么&运算符允许我像指针一样分配一个值(当它不是指针时,为它分配一个在 RAII 和函数范围内保留的值),因为它可以在我的函数foo()中打印出来main()即使不是static?我假设它不是指针,因为我可以size()使用.运算符而不是->用于指针的运算符来访问该方法。

&其次,在函数参数中使用运算符与使用运算符有什么区别*?它与像这样的普通变量有什么不同吗std::string param?它似乎是这样称呼的(foo(test)而不是foo(&test))。

c++ function dereference address-operator

2
推荐指数
1
解决办法
1万
查看次数