栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

[逆向|C语言]C语言while do while

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[逆向|C语言]C语言while do while

目录

一.while循环

<1>.格式

<2>.while循环的关键要素

<3>.while循环就是通过if+goto演变过来的

<4>.while循环看它往回跳的位置来确定整个循环的范围

二.do...while循环

<1>.格式

<2>.do...while反汇编表达式判断条件是正的,判断条件是什么指令就是什么.

三.while与do while的区别


一.while循环

<1>.格式

While(表达式)
{
语句
}

while()里的表达式可以是关系运算,可以是算术运算,算术运算一定要注意容易造成死循环,一定要加上break;关系运算就看表达式的关系是否成立,while循环一般情况下都是用的关系运算

<2>.while循环的关键要素

1.需要括号里的表达式成立

2.判断哪个变量就要给那个变量设置条件

3.判断条件不能存放结果

 

<3>.while循环就是通过if+goto演变过来的

goto语句相当于汇编的jmp指令,也是和lab搭配使用

int fun()
{
	//定义变量
	int a;
	int b;

	//初始化
	a=1;
	b=1;

lab:
	if(a<=5)
	{
		b=a+b;
		a++;
		goto lab;
	}


  	printf("%dn",b);
    return 0;
}
​
int fun()
{
	//定义变量
	int a;
	int b;

	//初始化
	a=1;
	b=1;

	while(a<=5)
	{
		b=a+b;
		a++;
	}


  	printf("%dn",b);
    return 0;
}

​

如上面代码所示,while循环就相当于if+goto.

<4>.while循环看它往回跳的位置来确定整个循环的范围
	while(a<=5)
	{
		b=a*b;
		a++;
		while(a)
		{
			b++;
		}

	}

上面代码外面一层循环里面一层循环,怎么确定它的循环范围,如下图所示是它的反汇编

 如图所示,关键点看往回跳的位置,图上已做了清楚的标注,红框为外层循环范围,橙框为内层循环范围.

二.do...while循环 <1>.格式

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

注意看清楚,Do while 后面要记得有个分号,

<2>.do...while反汇编表达式判断条件是正的,判断条件是什么指令就是什么.
		do
		{
			b=a+b;
         	a++;

		}while(a<=5);

上面代码的反汇编如下图所示

 如图可以看出,判断条件是小于等于,反汇编里的指令也是小于等于

三.while与do while的区别

while是先判断后执行

do while是先执行后判断

int fun1()
{
	int a;
	int b;
	a=10;
	b=0;
	while(a<=3)
	{
		b=a+b;
         a++;
	}
	printf("%dn",b);
	return 0;
}
int fun1()
{
	int a;
	int b;
	a=10;
	b=0;
	
 	do 
 	{
 		b=a+b;
          a++;
 	} while (a<=3);
		printf("%dn",b);
		return 0;
}

如上面代码所示,while循环与do...while循环明显结果不同,因为判断条件就算不满足,do...while也会先执行一次


今天的文章就到这里了,如果有任何不明白的地方欢迎与我交流,我必定知无不言。这篇文章也花了一定的心血,喜欢的小伙伴可以点赞关注哦。感激不尽!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982189.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号