C语言中有几个语句可以打乱程序的执行顺序,不同的语句对应不同的功能。
1、break
break语句表示退出当前的程序段,跳过当前程序段里未执行的程序,执行新的程序段代码。
1、break经常用在switch语句中,在switch语句中使用了break语句,当执行switch语句中的break语句时,仅退出switch语句,执行switch后面的程序块。
switch ( n )
{
case 1 :
程序1;
break;
case 2 :
程序2;
break;
case 3 :
程序3;
break;
case 4 :
程序4;
break;
case 5 :
程序5;
break;
default:
;
break;
}
假如 n=1,则执行完程序1,之后就跳出switch,执行switch下面的程序。
2、break还会经常用在循环结构里面,在循环结构中使用break语句,如果执行了break语句,那么就退出循环,接着执行循环结构下面的第一条语句。
特别注意:如果在多重嵌套循环中使用break语句,当执行break语句的时候,退出的是它所在的循环结构,对外层循环没有任何影响。
for(1)
{
for(2)
{
break1;
}
break2;
}
当执行break1的时候,跳出for(2),for(2)程序结束;然后继续执行for(2)下面的程序块,继续进行for(1),执行break2,跳出跳出for(1),for(1)程序结束。
2、continue
continue语句是这几种结束循环的方式中最特殊的,因为它并没有真的退出循环,而是只结束本次循环体的执行,继续下次循环,所以continue只是跳出当前的这一次循环。
for(1)
{
for(2)
{
continue1;
}
continue2;
}
当执行continue1的时候,跳出for(2),继续进行for(2),直到for(2)结束;然后继续执行for(2)下面的程序块,执行continue2,跳出跳出for(1),继续进行for(1),直到for(1)结束。
3、goto
goto语句表示跳转,goto语句可以跳转到标号所在的任何地方继续往下执行。
注意:标号必须与goto语句在同一个函数体内,不能跨越函数体。
for(1)
{
...
goto label;
...
}
....
label:
.....
函数执行goto label语句,然后程序跳转到 label 标签所在的位置,执行 label 下面的程序。
4、return
return是结束当前的函数,返回上一层函数,无论return在函数的任何位置。如果在程序中遇到return语句,那么代码就退出该函数的执行,返回到函数的调用处,如果是main()函数,那么结束整个程序的运行。
5、exit
exit 也是退出当前的函数,但是exit()函数与return语句的最大区别在于,调用exit()函数将会结束当前进程,同时删除子进程所占用的内存空间,把返回信息传给父进程。当exit()中的参数为0时,表示正常退出,其他返回值表示非正常退出,执行exit()函数意味着进程结束;而return仅表示调用堆栈的返回,其作用是返回函数值,并且退出当前执行的函数体,返回到函数的调用处,在main()函数中, return n和exit(n)是等价的。