破开C语言暗夜的第三道光——控制语句

控制语句

控制语句是用于控制程序的执行流程,以实现程序的各种结构方式的语句。(C语言支持三种结构:顺序结构、选择结构和循环结构)

C语言有九种控制语句,可分为以下三类:
1、条件判断语句(分支语句):if语句,switch语句。
2、循环语句:while语句,for语句,do…while语句。
3、转向语句:break;continue;return;goto语句。

一、分支语句

  • if语句

if语句的语法结构

    //单分支—单代码块
	if (表达式)
		语句;

	//单分支—双代码块
	if (表达式)
		语句1;
	else
		语句2;

	//多分支
	if (表达式1)
		语句1;
	else if (表达式2)
		语句2;
	……
	else if (表达式n)
		语句n;
	else
		语句;

else的匹配:没有大括号的嵌套分隔时,else与离它最近的if相匹配。

:如果表达式为真,语句执行;表达式为假,则不执行。
  0表示假,非0表示真

  • switch语句

switch语句常用于多分支的情况,switch语句允许嵌套使用。

switch语句的语法结构

	switch (整型表达式)  // !! 整型
	{
		语句项;
	}

其中的语句项是一些case语句和default语句

	// case语句
	
	case 整型常量表达式:  // !! 整型,常量
		语句;
		break;  
		
   //除非有意为之,否则每一条case语句写完下面都要加上一个break;

default子句

  default:
      语句;

当表达式的值与所有case标签的值都不匹配时,用一个default子句来做提示,让整个switch语句的表达更加完整。

default子句可放在任何一个case可以出现的位置,一般建议放在最后。

二、循环语句

  • while循环

while的语法结构

    while (表达式)
    {
        循环语句;
    }
  • for循环

for循环的语法结构

	 // 初始化  条件判断  循环变量调整
	for (表达式1; 表达式2; 表达式3)
	{
		循环语句;
	}

for循环条件中的3个表达式均可省略,但没有特殊用处或没有把握时不建议省略。

补充,用for还是while?

  1. 循环体执行的代码相同的条件下,for循环的效率高于while循环

C源代码:

int main()
{
	while (1);
	for (;;);

	return 0;
}

对应的汇编代码:

	while (1);
00007FF68C2F176B  xor         eax,eax  
00007FF68C2F176D  cmp         eax,1  
00007FF68C2F1770  je          main+24h (07FF68C2F1774h)  
00007FF68C2F1772  jmp         main+1Bh (07FF68C2F176Bh)  
	for (;;);
00007FF68C2F1774  jmp         main+24h (07FF68C2F1774h)  

汇编代码解析:
  可以看到,“while (1);”语句,需要4条汇编指令:立即数、与操作、比较、跳转;
  而“for (;;);”语句,只需要一条汇编指令。

  1. C99标准下,for循环的循环变量可在初始化部分同时定义和初始化
    for (int i = 0;;);

这样写for循环结束后 i 占用的栈内存就会被释放,可节约内存,while则不行。

  1. while循环的调整部分在循环体内部,容易一个不小心改动了循环变量导致循环错误。

综上,在能使用for循环的情况下建议使用for循环代替while循环。

  • do…while循环

do…while循环的使用场景:循环至少循环一次。

do语句的语法结构

	do
	{
		循环语句;
	} while (表达式);

三、转向语句

  • break

break的作用:跳出直接所在的那层循环。

若为一层循环直接跳出循环, 若为嵌套循环,以2层为例:在内层循环遇到break是跳到外层循环,在外层循环则跳出循环体。

  • continue

continue的作用:跳过所在循环continue下面的代码,直接回到所在循环的循环条件部分。

:在循环体内才能使用break和continue。

  • return

return的作用:直接跳出所在的函数体。

  • goto语句

使用goto语句可实现代码执行顺序的跳转。
可用于一步跳出深度嵌套和实现一些简单的循环。

	for(...)
	{
		for (...) 
		{ 
			for (...) 
			{ 
				if (disaster)
					goto error;  //跳出深度嵌套
			}
		}
		……
  //error是标记跳转位置的标号,这个标号名是人为命名的
  //要与上面goto后面的标号保持一致
error:		
    if (disaster)   // 处理错误情况

注意:goto语句只能在同一个函数内部跳转,不能跨函数跳转。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遥逖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值