第 7 章 运算符
7.5 赋值运算符 ——副作用针对左操作数
1. 赋值运算符有副作用,针对左边操作数
2. 左边操作数必须是变量的形式,右边操作数可以是常量、变量、表达式
eg:c += 3; // 等价于 c = c + 3;
// 从右向左赋值
int x = num = 100; // 先计算 num = 100 ——> 再把 num 赋值给 x
eg:内存不同单位转换
// 单位转换 GB MB KB B
// capacity * 1024 * 1024 * 1024;
//capacity = capacity << 10 << 10 << 10; ——( <<10:表示 乘以2^10)
7.6 三元运算符
a ? b: c;
表达式取值规则:
① a 成立,b 作为整个表达式的值
② a 不成立,c 作为整个表达式的值
7.7 其他运算符
, 二元运算符,表达式的值是第二个操作数的值
sizeof
&
* ——取值运算符
. ——成员选择(对象)
-> ——成员选择(指针)
7.8 运算符优先级
(56 + 89) * 2
56 + 9 - 7
int a=10;
a++ + a-- - a++ * a--
a > 10 * 2
a >= 18 && a < 60
(1)不要过多的依赖运算的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用小括号来控制表达式的执行顺序。
(2)不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。
(3)运算符优先级不用刻意地去记忆,总体上:一元运算符 > 算术运算符 > 关系运算符 > 逻辑运算符 > 三元运算符 > 赋值运算符。
特例:当给一个变量加括号赋多个值时,只把括号最右边的值赋予该变量
int res1 = (a=200,b*=5);
printf("res1=%d \n", res1); //100√
int res2 = (a=100,b=200,c=300);
printf("res2=%d \n", res2); //300√
注:添加 () 提高优先级!
第 8 章 流程控制
8.1 分支控制语句
① 单向分支
if (条件表达式)
{
语句1;
语句2;
...
语句n;
}
② 双向分支
if (条件表达式)
{
语句1;
语句2;
...
语句n;
}
else
{
语句1;
语句2;
...
语句n;
}
③ 多向分支 else if
if (条件表达式1)
{
语句1;
语句2;
...
语句n;
}
else if (条件表达式2)
{
语句1;
语句2;
...
语句n;
}
else if (条件表达式2)
{
语句1;
语句2;
...
语句n;
}
else
{
语句1;
语句2;
...
语句n;
}
④ 多向分支 switch case
switch (表达式)
{
case 表达式可能的值1:
语句1;
语句2;
...
break;
case 表达式可能的值2:
语句1;
语句2;
...
break;
case 表达式可能的值3:
语句1;
语句2;
...
break;
default:
语句1;
语句2;
...
}
注意:
(1)switch后面表达式的值必须是一个整型(char、short、int、long等)或枚举类型。
(2)case后面的值必须是字面量常量,而不能是变量。
(3)default是可选的,当没有匹配的case时,执行default。
(4)break语句可以使程序跳出switch语句块,如果没有break,会执行下一个case 语句块,直到遇到break或者执行到switch结尾,这个现象称为穿透。
⑤ 嵌套分支 (双向分支+嵌套)
if ()
{
if ()
{
}
switch ()
{
case 10:
if ()
{
}
break;
case 20:
....
}
}
else
{
}
8.2 循环控制语句
① while 循环
while (条件表达式)
{
语句1;
语句2;
...
语句n;
}
死循环:
while (1)
{
printf("How Are You!\n");
}
② do while 循环
do
{
语句1;
语句2;
...
语句n;
} while (条件表达式);
注:do while 只有第一次没有经过判断直接执行循环体语句,以后每次都要经过判断!
while 与 do while 的区别
while: 每次循环都是先判断再执行循环体语句
do while: 第一次没有判断直接执行循环体语句,但以后每一次执行都要经过判断
③ for 循环
for (循环控制变量初始化; 条件表达式; 循环控制变量的变化)
{
语句1;
语句2;
...
语句n;
}
说明:
- 循环控制变量初始化只执行一次,在循环之前
- 条件表达式,每次循环语句执行前先进行条件判断,比循环体语句(大括号内部的语句)多执行一次
- 循环控制变量循环几次就执行几次,每次会在循环体语句后面执行
死循环
第一种:
for (; 1;)
{
printf("How Are You \n"); // 该行也可以省略
}
第二种:
for (;;)
{
printf("How Old Are You! \n");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)