三目运算符在C和C++编译器中的不同

本文探讨了C语言与C++中三目运算符的使用差异,重点讲解了C++中三目运算符能作为左值的原因及其在C语言中的实现方式。在C++中,三目运算符返回的是变量的内存地址,允许其用作左值进行赋值操作。而在C语言中,由于返回的是值而非地址,无法直接作为左值。文章还提供了在C语言中模仿C++行为的方法。

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


#include <iostream>
using namespace std;
 
 
//在C语言中 表达式的结果 放在什么地方 寄存器
//1 
// 在C语言中, 表达式的返回值 是变量的值
// 在C++中, 表达式返回的是变量的本身 
 
//2 如何做到的
//让表达式返回一个内存空间 ..内存首地址 指针
//在C语言中 如何 实现 c++的效果
 
//3 本质 
//c++编译器 帮我们程序员完成了 取地址的工作 
 
int main()
{
	int a = 10;
	int b = 20;
 
	int var = 100;
	var = 101;
 
	//返回一个最小数 并且给最小数赋值成3
	//三目运算符是一个表达式 ,表达式不可能做左值
	(a < b ? a : b )= 30;
 
	//int z = (a < b ? a : b );
 
	printf("a = %d, b = %d\n", a, b);
 
	system("pause");
 
	return 0;
}

在c语言中,三目运算符是不能直接当左值的,因为在c语言中,表达式返回的是一个值(数),在数是不能当左值的,而在C++中,三目运算符是可以当左值的,因为在C++编译器中,三目运算符返回的是变量本身(即内存空间),而不是一个值,所以是可以当左值的。在C++中编译器自动完成了对三目运算符的取地址命令,所以返回的是变量的本身。

 

注意:

1. c语言返回变量的值,而c++中返回的变量本身

c语言中的三目运算符返回的是变量值,不能作为左值使用

c++中的三目运算符可以直接返回变量本身,因此可以出现在程序的任何地方

2. 三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用,如:

(a<b?1:b)=30
3. c语言如何支持类似C++的特性呢?

当左值的条件是,要有内存空间:c++编译器自动帮助程序员完成了取一个地址而已;

因此要让c中的三目运算符当左值,只需要返回一个地址就可以了:

*(a<b?&a:&b)=30
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值