Linux C 编程教程第 12 部分 - 赋值运算符和条件表达式
在这个正在进行的 C 编程教程系列中,我们已经讨论了一些基本内容,例如算术、逻辑和关系运算符以及条件循环(例如 if 和 while)。除此之外,本教程将重点介绍赋值运算符(= 除外)和条件表达式。
让我们从赋值运算符开始。如果您到现在为止已经创建了基本的 C 程序(我相信您在学习了我们的系列教程之后尤其会这样做),那么您很可能已经完成了类似于以下内容的操作:
a = a + 1;
正确的?
今天要学的新东西是你可以将这个表达式重写为如下:
a += 1;
是的,+= 是一个运算符,也称为赋值运算符。
现在,如果我说使用像这样的赋值运算符使代码更紧凑和可读,你们中的一些人可能会争辩说,在我们使用的示例的上下文中,增量运算符同样好,因为它也确保了 a gets 的值增加了 1。
a++;
我同意,但请考虑以下其他情况:
b = b + 10;
b = b + c
在这些情况下,使用赋值运算符无疑使代码编写、阅读和审查一步到位。
还是不相信?也许,下面的通用示例会让您更好地了解赋值运算符的价值。看一看:
arr1[arr2[integer1 + integer2] + arr3[integer3 + integer4] + arr4 [integer5 + integer6]] = arr1[arr2[integer1 + integer2] + arr3[integer3 + integer4] + arr4 [integer5 + integer6]] + 5
这行代码需要时间才能具体理解,因为您必须确保两个数组(在=运算符的每一侧)引用相同的值或不同。在这种情况下,他们这样做了,所以更好的方法是按以下方式使用赋值运算符:
arr1[arr2[integer1 + integer2] + arr3[integer3 + integer4] + arr4 [integer5 + integer6]] += 5;
因此,在这种情况下使用赋值运算符不仅使该行非常容易理解,而且从某种意义上说它对编译器更友好,因为它可以帮助编译器生成高效的代码。
既然您已经确信(我真的希望您这样做)赋值运算符很有用,下面是具有相应二元运算符的运算符列表:
+ - * / % << >> & ^ |
到目前为止,我们已经在教程中讨论了列表中的前五个运算符。最后五个是按位运算符,我们将在我们即将推出的教程中讨论它们。同时,这里是与其中一些运算符对应的赋值运算符的快速参考:
a += b;
a -= b;
a *= b;
a /= b;
a %= b;
所以一般来说,您可以记住以下几点:
expression1 = (expression1) op (expression2)
可以表示为:
expression1 op= expression2
其中 op 是正在使用的运算符,如 +、-、* 等。
请注意以下表达以及与其类似的表达:
a *= b - c
将扩展为:
a = a * (b-c)
我希望我至少能够在基本层面上清楚赋值运算符的概念。继续,现在让我们快速讨论条件表达式。
举个例子:
if(a==b)
c = c + 1;
else
c = c - 1;
条件表达式可帮助您在一行中编写此类逻辑。就是这样:
c = (a==b) ? (c+1) : (c -1)
所以在这里,首先检查条件 (a==b)。如果为真,则将 (c+1) 分配给 c,否则将 (c-1) 分配给 c。这是一个示例代码,可以使事情更清楚:
int main()
{
int a = 6, b = 5, c = 9;
c = (a==b) ? (c+1) : (c -1) ;
printf("\n %d \n", c);
return 0;
}
由于这里 a 不等于 b,因此 c 被赋值为 (c-1),这意味着 c 的新值变为 8。为了以防万一,这里是条件表达式的通用形式:
expression1 ? expression2 : expression3
我希望您对赋值运算符和条件表达式有一个基本的了解。现在鼓励您在日常编码活动中使用这些,如果您遇到任何问题,请不要忘记在这里给我们留言。