相关疑难解决方法(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万
查看次数

指针与参考

在给函数提供原始变量时,最好的做法是:

unsigned long x = 4;

void func1(unsigned long& val) {
     val = 5;            
}
func1(x);
Run Code Online (Sandbox Code Playgroud)

要么:

void func2(unsigned long* val) {
     *val = 5;
}
func2(&x);
Run Code Online (Sandbox Code Playgroud)

IOW:有没有理由选择一个而不是另一个?

c++ variables pointers reference

249
推荐指数
7
解决办法
11万
查看次数

在C++中通过引用传递指针是否有好处?

在C++中通过引用传递指针有什么好处?

最近,我看到一些例子选择通过指针传递函数参数而不是通过引用传递.这样做有好处吗?

例:

func(SPRITE *x);
Run Code Online (Sandbox Code Playgroud)

随叫随到

func(&mySprite);
Run Code Online (Sandbox Code Playgroud)

func(SPRITE &x);
Run Code Online (Sandbox Code Playgroud)

随叫随到

func(mySprite);
Run Code Online (Sandbox Code Playgroud)

c++ pointers parameter-passing pass-by-reference

220
推荐指数
6
解决办法
12万
查看次数

引用指针

char *str = "Hello";

char *ptr = str;
char *&rptr = str;
Run Code Online (Sandbox Code Playgroud)

ptr和rptr有什么区别?我理解rptr是一个指针的引用(理论上),但它与ptr的实现方式有何不同?

C++中的引用是否使用指针实现?

c++ pointers reference

22
推荐指数
3
解决办法
3万
查看次数

&和*之间的差异作为参数

以下两种参数类型有什么区别?第一个接受一个指针,它实际上是一个内存地址,第二个也是一个内存地址?

foo(float& bar)
{
    // do stuff
}

foo(float* bar)
{
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

你能不能同时打电话:

float pow = 3.0f;

foo(&pow);
Run Code Online (Sandbox Code Playgroud)

要么

float* pow = 3.0f;

foo(pow);
Run Code Online (Sandbox Code Playgroud)

c++

4
推荐指数
1
解决办法
2216
查看次数