相关疑难解决方法(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++:函数/方法声明中的&符号"&"和星号"*"之间的区别?

那些之间是否有某种微妙的区别:

void a1(float &b) {
    b=1;
};
a1(b);
Run Code Online (Sandbox Code Playgroud)

void a1(float *b) {
    (*b)=1;
};
a1(&b);
Run Code Online (Sandbox Code Playgroud)

它们都是相同的(或者看起来似乎来自main()),但第一个显然更短,但我看到的大部分代码都使用第二种表示法.有区别吗?也许万一它是一些对象而不是浮动?

c++ pointers reference

66
推荐指数
4
解决办法
6万
查看次数

C++函数:&符号和星号

假设您有一个修改变量的函数.

你应该这样写:void myfunc(int *a)或者像这样void myfunc(int &a)

前者强制你调用函数,myfunc(&b)因此调用者知道b将被修改,但后者更短,可以简单地调用myfunc(b).那么哪个更好用?还有什么我想念的吗?

c++ pointers function

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

参数定义(类型和名称)和(类型*名称)之间有什么区别?

这是一个非常基本的问题,但是,从C++专家那里听到它会很好.

在C++中有两种相似的方法来声明by-reference参数.

1)使用"星号":

void DoOne(std::wstring* iData);
Run Code Online (Sandbox Code Playgroud)

2)使用"&"":

void DoTwo(std::wstring& iData);
Run Code Online (Sandbox Code Playgroud)

每种方法的含义是什么?在任何情况下都有任何问题吗?

奖金#1:在#1和#2中调用方法的正式方法是什么?它们都被称为"按参考"吗?

奖金#2:故意使用std :: wstring.在每种情况下,对标准库类有什么影响?

c++ argument-passing

5
推荐指数
1
解决办法
3703
查看次数

各种符号(*,&等)与参数结合的区别是什么?

可能重复:
c ++*vs&in函数声明

我知道这对你们许多人来说似乎是一个非常基本的问题,但我真的有一个不可能的时间找到一个好的,彻底的解释,尽管我最好的谷歌搜索.我确定答案就在那里,所以我的搜索条件一定很糟糕.

在C++中,各种符号及其组合用于标记参数(以及这些参数的参数).究竟是什么意思呢?

例:void func(int *var)和之间有什么区别void func(int **var)?怎么样int &var

同样的问题代表返回类型以及参数.int& func(int var)int* func(int var)?相比,意味着什么?在论证中,有何y = func(*x)不同y = func(&x)

如果你能指出我正确的方向,我非常乐意阅读关于这个主题的大量文章.另外,我对一般编程概念非常熟悉:OO,泛型/模板等,而不是C/C++中使用的符号.

编辑: 似乎我可能给人的印象是我不知道指针是什么.我想知道那是怎么回事:)

所以为了澄清:我完全理解指针是如何工作的.我没有抓住,奇怪地无法找到答案的意思是,例如'void func(int&var)'.在一个赋值语句的情况下,"&"运算符将是对右侧,如在"诠释*X =&Y;",但在上述中,"&"操作者实际上是在左手侧.换句话说,它是在l值上运行,而不是在r值上运行.这显然不具有相同的含义.

我希望我现在更有意义吗?

c++ syntax notation

4
推荐指数
2
解决办法
7126
查看次数