找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2232|回复: 0
打印 上一主题 下一主题
收起左侧

[C++]笔记十五:C++对C的扩展——三目运算符功能增强

[复制链接]
跳转到指定楼层
楼主
三目运算符在C编译器中的表现:
运行程序我们发现编译失败!
看原因我们看到是表达式不能做左值
这句话怎么理解呢?
C语言中,表达式的返回值是一个数表达式的运算结果放在了CPU寄存器里面,而不是内存中,不是一个内存地址(后面查笔记有关CC++的左值右值
也就是说C语言中a=10,b=20,执行a<b?a:b 语句就是10<20 吗?是的! 那就返回a的值吧!】就把数字“10”返回了,接着就是 10=30,30赋值10这是怎么个意思就出错了!
C++表达式返回的是变量的本身也就是返回的变量a
C++中编译同样的代码:
那么在C语言如何实现同样的效果呢?
我们想一下,如果想表达式能当左值,就是说三目表达式应该返回一个内存空间也就是内存的首地址!内存的首地址是什么呢?就是指针吧。
a<b ? a:b 这个表达式就算完毕之后,我不想让它返回a的值10如果我能返回a的地址,然后再给这个地址赋值那就可以了。
我可以这么写:(a < b ? &a : &b) = 30,通过这个地址就可以间接修改指针指向的内存空间,也就间接修改了a的值,注意在括号前面再加上星号“ * ”就是修改对应的值了。我们修改后再运行发现C++运行是一样的。
所以C++编译器是帮我们程序员完成了取地址的工作。
结论
1 C语言返回变量的值,C++语言返回变量本身;
C语言中的三目运算符返回的是变量值,不能作为左值使用;
C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方。
2、注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用,如
a < b ? 1 : b= 30;
3、C语言如何支持类似C++的特性呢?
当左值的条件:要有内存空间,C++编译器帮助程序员取了一个地址而已。
【C++】笔记系列均为原创,转载请注明转自微号:Lightspeed-Tech  或  AutoCode
更多精彩资料,请关注!

评分

参与人数 2黑币 +15 收起 理由
白鹤859 + 10 很给力!
tyyhm + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶2 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表