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

使用int*&通过引用传递指针导致奇怪的问题

我正在编写以下内容以通过引用传递指针.但是,当我尝试取消引用指针时,它会给出意想不到的值.

void passPointers(int* &a){
    int p = 5;
    a = &p;
}
int main(){
  int x = 3;
  int *y= &x;
  cout<<"y is "<<y<<" *y is "<<*y<<endl;
  passPointers(y);

  //cout<<"y is "<<y<<" *y is "<<*y<<endl;//line a
  cout<<" *y is "<<*y<<endl;//It returns 5
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我取消注释a行,它返回y的地址,*y返回一些未知的整数值.我打破了一些C++规范.我在编写此代码时使用了链接.我正在使用g ++ 7.3.0

c++ pointers

0
推荐指数
1
解决办法
72
查看次数

这是什么意思?

Node *&front在C++中下面的链表代码提取是什么意思?

 FrontBackSpilit(head,a,b) 

 Node * FrontBackSpilit(Node * head, Node *&front, Node * &back) 
Run Code Online (Sandbox Code Playgroud)

c++ syntax pointers reference

-1
推荐指数
1
解决办法
309
查看次数

标签 统计

c++ ×3

pointers ×3

reference ×2

c++-faq ×1

syntax ×1