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

浅谈在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++中一样。

猜你喜欢

转载自blog.csdn.net/y____xiang/article/details/81586707