相关疑难解决方法(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++函数签名中使用&运算符

我目前正在阅读Accelerated C++,我意识到我并不真正了解函数签名的工作原理.

int* ptr=#
Run Code Online (Sandbox Code Playgroud)

意味着ptr现在将地址保存为num,但这意味着什么?

void DoSomething(string& str)
Run Code Online (Sandbox Code Playgroud)

从我的理解,这是一个变量的引用传递(这意味着传递地址),但当我这样做

void DoSomething(string& str)
{
  string copy=str;
}
Run Code Online (Sandbox Code Playgroud)

它创造的是str的副本.我认为它会做的是引发错误,因为我正在尝试分配一个指向变量的指针.

这里发生了什么?在函数调用中使用*和&是什么意思?

c++ pass-by-reference

24
推荐指数
4
解决办法
5万
查看次数

标签 统计

c++ ×2

c++-faq ×1

pass-by-reference ×1

pointers ×1

reference ×1