编程小白探索笔记---c++与C语言中三目运算符的区别

编程小白探索笔记---c++与C语言中三目运算符的区别

  • 复习笔记:
    • 示例代码
    • 三目运算符的定义:
    • 实际原因:
    • 总结

复习笔记:

示例代码

在C语言编辑器中

int  main()
{
	int a = 10;
	int b = 20;
	(a < b ? a : b) = 30;
	printf("a = %d,b = %d\n", a, b);
	return  0;
}

上述代码编译不通过

而在c++编译器中相同的代码,却编译的了

int  main()
{
	int a = 10;
	int b = 20;
	(a < b ? a : b) = 30;
	printf("a = %d,b = %d\n", a, b);
	system("pause");
	return  0;
}

面对俩个不同的结果,这是不是让人很疑惑呢?
现在,让我们回到三目运算符的定义

三目运算符的定义:

  • 三目运算符的定义 三目运算符:计算机C/C++的重要组成部分。

  • 条件运算符是唯一有3个操作数的运算符,所以有时又称为三元运算符。

  • 三目运算符:是软件编程中的一个固定格式为?: 。

  • 三目运算符:一定要用于赋值语句。

  • 三目运算表达式:<表达式1>?<表达式2>:<表达式3>

    注:”?”运算符的含义是: 先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果 ; 如果表达式1的值为假,则执行表达式3 ,并返回表达式3的结果。

int a=1, b=2, z;
z = (a>b) ? a : b;//条件成立赋左值z=a,条件不成立赋右值z=b

最后结果是:z=2

实际原因:

三目运算符是一个表达式,表达式不可能做左值
在c语言编译器中

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

传递回来的是一个值,如 “10=20“,这显然不可以
而在c++编译器中,

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

(a < b ? a : b)传递回来的是一个变量,编译器中为这个变量开辟了一块新的内存空间,开辟一块内存空间后,我们将这个值赋给内存空间。刚好就可以编译通过。

回顾一个知识点:

变量名是定义内存空间的别名

而如果我们在C语言中写的是以下代码

int  main()
{
	int a = 10;
	int b = 20;
 	*(a < b ? &a : &b) = 30; 	
	printf("a = %d,b = %d\n", a, b);
	return  0;
}

编译通过,而且输出的是 a=30,b=20
他通过对比大小后来决定取a还是b的地址,通过指针来改变该地址中存取的值

总结

在此次中,主要是c++编译器帮我们程序员实现了取地址的工作,其三目运算符在c++编译器中开辟了一块新的内存空间,使我们来改变最后的数值得到了可能
在C语言中,表达式的返回值是变量的值
而c++中,表达式返回的是变量的本身

你可能感兴趣的:(c++)