C/C++知识点

1、指针与引用的区别

  • 指针是一个变量,该变量存储的是一个地址;引用是原变量的别名,等同于对原变量操作
  • 指针可以是空值;引用必不是空值
  • 指针可以在任何时候赋值;引用只能且必须在初始化时赋值
  • &出现在初始化时(等号的左边)、函数的声明和定义中时,即为引用,可避免产生临时对象
  • &出现在等号的右边时,即为取址,不可修改赋值

引用 正确/错误代码

int a;
int &b = a;
int &c = b;
int &d = b;
d = 1;
cout << a << " " << b << " " << c << " " << d << endl;
const int &e = 1;
// Success

int &f;
// E0252 “引用变量‘f’需要初始值设定项”:不能只声明引用不设定初始值

int &g = 1;
// E0461 “非常量引用的初始值必须为左值” :常数显然不能作为左值

int h = 2;
&a = h;
&b = h;
// E0137 “表达式必须是可修改的左值”:&带参数代表取址,显然不能作为可修改的左值

关于传值、传引用、传指针

  • 传值是最简单明了的。优点是新生成了临时对象,不会对原有对象造成干扰,相对的缺点则是无法对原对象进行修改(如果返回后赋值就不如直接引用)
  • 传引用和传值是相对的。优点是直接对原有对象进行操作,相对的缺点就是不会生成新的对象,原有对象被改变了就无法回退(要想保留原来的对象就必须使用值传递)
  • 传指针则兼顾上述两者。优点是既可以对原有的对象直接进行操作,又可以生成新的对象,缺点是虽然可以生成新的对象,但是相较于值传递分配的对象空间需要手动释放,容易因为代码问题造成内存泄漏。

ps:虽然指针看起很好用,但是在没有对应需求(对原对象进行操作、生成新的对象进行操作)时,传值和传引用显然更加简洁,所以并没有那种方式就一定最好,一切都应该看需求来定,有得必有失,存在即合理

2、左值与右值

不可作为左值即为只能作为右值;
常见的不可作为左值:1、&a

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、C语言基础 1、struct 的内存对齐和填充问题其实只要记住一个概念和三个原则就可以了: 一个概念:自然对齐...
    XDgbh阅读 2,250评论 1 38
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,624评论 28 53
  • 步骤:发微博01-导航栏内容 -> 发微博02-自定义TextView -> 发微博03-完善TextView和...
    dibadalu阅读 3,198评论 1 3
  • 人工智能是什么?什么是人工智能?人工智能是未来发展的必然趋势吗?以后人工智能技术真的能达到电影里机器人的智能水平吗...
    ZLLZ阅读 3,996评论 0 5
  • 上周六在压力下实在需要释放,去西塘躲了两天,真是好地方,很优雅的江南古镇,而且与周庄比开发不算过度。 我们是周五半...
    聚塔阅读 847评论 2 2