petard  

第 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);     //100int 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;
}

说明:

  1. 循环控制变量初始化只执行一次,在循环之前
  2. 条件表达式,每次循环语句执行前先进行条件判断,比循环体语句(大括号内部的语句)多执行一次
  3. 循环控制变量循环几次就执行几次,每次会在循环体语句后面执行

死循环

第一种:
		for (; 1;)
   		{
    	     printf("How Are You \n"); // 该行也可以省略
    	}
    	 
第二种:
    	for (;;)
    	{
    	     printf("How Old Are You! \n");
    	}

④ 多重循环

posted on   岌岌无名  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
 
点击右上角即可分享
微信分享提示