C语言和C++中三目运算符的区别

本文探讨了C和C++中三目运算符的不同之处,详细解释了其工作原理,并通过实例展示了如何在C++中利用三目运算符给变量赋值,以及如何在C语言中模拟这一特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浅谈在C和C++中三目运算符的区别:

C语言中唯一的三目运算符由 ? :组成

它的一般形式: 表达式1 ? 表达式2 : 表达式3;

如果表达式1的值为真,那么就返回表达式的值,否则返回表达式二的值。

【注意】:在c语言中表达式返回的是一个数值。

如果尝试给这个表达式赋值,那么编译就会报错。因为返回的是一个值,如果对这个值赋值,就相当于给一个常数赋值 10 = 40;这样肯定是有问题的。

C++中的用法基本和C语言中的一致,但是C++给这个三目运算符赋予了新的功能。

一般形式 :表达式1 ? 表达式2  :表达式3

如果表达式1的值为真,进入表达式二,否则进入表达式3,最终返回的是一个变量本身,而不是值。所以我们给这个表达式进行赋值。

来看一个例子:

int a = 10, b = 20;

(a < b ? a : b) = 60;

cout << a << endl;

上面这段代码在C++编译器中编译是没有问题的,而且输出一个60,这就说明,C++给三目运算符赋予了新的功能,它返回的是一个变量本身,因此可以给这个变量赋值。

【注意】:如果a和b当只要有一个是常量,就不可以用这个特性

整个过程是这样的,a < b 为真,就返回a这个变量本身,然后再给这个变量赋值。

利用C语言实现C++中的三目运算符的功能:

首先就得返回一个变量本身,变量的本质其实就是一段内存空间,我们只需要用指针间接的操作这段内存空间就可以了

int a = 10, b = 20;

*(a < b ? &a : &b) = 60;

printf("a = %d\n", a);

 

在C语言中只要返回变量的地址,然后再间接的对这个地址进行操作就行了。

最后输出的结果是:a = 60 和C++中一样。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值