C++中三目运算符做左值

    C语言返回变量的值,C++语言是返回变量本身
  C语言中的三目运算符返回的是变量值,不能做为左值使用
  C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方
    三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用
  (a < b ? 1 : b )= 30;
    C语言如何支持类似C++的特性呢?
====>当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已
思考:如何让C中的三目运算符当左值呢?


        *(a < b ? a&: &b )= 30;  ====>指针真的是很灵活,先将运算结果返回地址,然后再取地址

 

测试参考源码:

#include 
using namespace std;

/*	在C语言中,表达式的结果放在寄存器中
	在C语言中, 表达式的返回值,是变量的值
	在C++中, 表达式返回的是变量的本身 
	让表达式返回一个内存空间,内存首地址;在C语言中如何实现c++的效果?
	c++编译器 帮我们程序员完成了 取地址的工作 
*/
void test01()
{
	int a = 11;
	int b = 22;
	* ( a < b ? &a : &b ) = 33;
	printf("a = %d, b = %d\n", a, b);
	return ;
}

int main(int argc, const char *argv[])
{
	int a = 10;
	int b = 20;

	//返回一个最小数 并且给最小数赋值成3
	//三目运算符是一个表达式 ,表达式不可能做左值
	(a < b ? a : b )= 30;

	printf("a = %d, b = %d\n", a, b);
	
	test01();
	return 0;
}

 

测试结果:

 

C++中三目运算符做左值_第1张图片

你可能感兴趣的:(C++,C++,C,三目运算符)