编程达人吧 关注:16贴子:35
  • 2回复贴,共1
本节主要内容:
1. if语句的书写格式
2. if else语句
老唐语录:
在函数调用时,用到的内存称为栈。无论在调用函数时,还是在函数内部,push指令都要对应相应的pop指令,或者esp值最终都要被恢复到调用函数之前的值,我们称之为栈平衡。
函数框架:
int abc(int ab,int cd,int ef)//ebp+0:原ebp值;ebp+8:ab;ebp+0xc:cd;ebp+0x10:ef
{
int v;//ebp-4
int h;//ebp-8
int r;
……
return 0;//把表达式的值赋给eax
}
C语言中最常用的语句是if语句。
格式:
if ()//圆括号里面可以写任意表达式
{
//可以写任意多个表达式
}
既然if语句中间可以放任意语句,if语句也属于语句,那么if语句中间也可以放if语句:
if ()
{
if ()
{
}
}
if语句的第二种格式:
if ()
{
}
else
{
//也可以是任意语句
}
if语句的第三种格式:
if ()
{
//可以是任意语句
}
else if()
{
//可以是任意语句
}
else if()
{
//可以是任意语句
}
else if()
{
//可以是任意语句
}
……//中间可以有任意多个else if语句
else //可以省略
{
//可以是任意语句
}
其中圆括号里面都可以放任意表达式,且每个表达式之间没有任何关系。将else if格式省略掉,变成第二种格式;将else if格式和else格式都省略掉,变成第一种格式。
练习:
练习if语句的三种格式,并在圆括号和大括号里面写任意表达式,并用汇编查看。
说明:逗号表达式也属于表达式,比如 if(表达式1,表达式2,……)
Jcc lab10指令等价于CMOVcc eip,lab10//lab10是标签
其实C语言中也含有功能等价于jmp的指令goto:
goto lab10;等价于jmp offset lab10
对于if语句,当圆括号里面的表达式值为非0时,执行大括号里面的程序。
课后理解:
if(表达式)
{
表达式;
}else if(表达式)
{
表达式;
}else
{
表达式;
}
其中表达式可以为空,数值,或判断语句。
课后疑问:
可以添加两个else语句,比如:
if ()
else
{
}
else
{
}
回答:不可以。因为else已经代表结束(包含了除上述情况外的所有情况),不需要再次结束。
课后总结:
if语句又称选择语句,用于在可选择的几个动作之间进行选择。
课后练习:
写出下列函数中FuncMove函数每次执行完后变化内存的值
int FuncMove(int n,int nX,int nY)
{
int nResult;
int nTemp1;
int nTemp2;
int nTemp3;
nResult = n;
nTemp1 = 0;
nTemp2 = 0;
nTemp3 = 0;
nTemp1 |= nY;
nTemp2 = 0x3E2D2D00;
nTemp2 |= nX;
return nResult ;
}
int FuncHanoi(int n,int One,int Two,int Three)
{
int nResult;
nResult = 1;
if (n==1)
{
FuncMove(n,One,Three);
}
else
{
FuncHanoi(n-1,One,Three,Two);
FuncMove(n,One,Three);
FuncHanoi(n-1,Two,One,Three);
}
return nResult;
}


1楼2016-06-16 07:33回复