C语言第三讲

1、const与#define的区别:(const常量在C语言中叫常变量,在C++中叫常量)

C++语言可以用const来定义变量,也可以用#define来定义常量。但是前者比后者有更多的优点:

(1)const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对于后者只能进行字符替换,不能进行类型安全检查,并且在字符替换时可能会出现错误(边际效应)。

(2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。

(3)在C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。

2、if语句和switch语句的区别:

(1)有了if语句为何还要switch语句?

理由:

switch语句是多分支选择语句,而if语句只有两个分支可供选择,虽然可以使用嵌套的if语句来实现多分支选择,但那样的程序冗长难度。这是switch语句存在的理由。

(2)格式:

A:if语句的格式:

  if(比较表达式1) {

     语句体1;

  }else if(比较表达式2) {

     语句体2;

  }else if(比较表达式3) {

     语句体3;
  }
     ...
  else {

    语句体n+1;
  }

B:switch格式:

  switch(表达式) {

        case 值1:

      语句体1;

      break;

       case 值2:

      语句体2;

      break;
          …

       default:

      语句体n+1;

      break;
        }

(3)if语句和switch语句的执行流程:

A:if语句的执行流程:


       首先计算比较表达式1看其返回值是true还是false,

  如果是true,就执行语句体1,if语句结束。

  如果是false,接着计算比较表达式2看其返回值是true还是false,

  如果是true,就执行语句体2,if语句结束。

  如果是false,接着计算比较表达式3看其返回值是true还是false,

  如果都是false,就执行语句体n+1。



B:switch语句的执行流程:


先计算表达式的值然后和case后面的匹配,如果有就执行对应的语句,否则执行

default控制的语句

不要忘记default分支,即使该程序真的不需要default处理也应该保留该语句

default:break;这样做并非多此一举,而是为了防止别人误以为你忘了default处理。

(4)在什么时候使用if和switch语句:

     switch建议判断固定值的时候用

   if建议判断区间或范围的时候用    

 *用switch能做的,用if都能做,但反过来则不行

(5)switch语句的高效性:

switch语句可以根据一个整数索引值进行多重分支,处理具有多种可能结果的测试时,

这种语句不仅提高了代码的可读性,而且通过使用跳转表使得这种数据结构的实现更加

高效。跳转表是一个数组,表项i是一个代码段的地址,这个代码段实现当开关索引值等

于i时程序应该采取的动作。程序代码用开关索引值来执行一个跳转表内的数据引用,确

定跳转指令的目标,和使用一组if-else语句相比,使用跳转表的优点是执行开关语句的

时间与开关情况的数量无关。

3、一些符号的含义:

>>:右移,即从后往前删去移动位数,再在最前面补零,将某数右移一位相当于缩小一

倍。(相当于除法)

<<:左移,即从前往后删去移动位数,再在最后面补零,将某数左移一位相当于扩大一

倍。(相当于乘法)

逗号表达式的特点:只会取到整个表达式的最后一个值,如:int a = (10,20,30);则a的

值为30.

&:按位取与

|:按位取或

~:按位取反


4、一些汇编语言的含义:

MOV(MOVE)传送指令

PUSH 入栈指令

POP 出栈指令

XCHG(exchange) 交换指令

XLAT(TRANSLATE) 换码指令

LEA (Load Effective Address) 有效地址送寄存器指令

LDS(Load DS with pointer) 指针送寄存器和DS指令

LES(Load ES with pointer) 指针送寄存器和ES指令

LAHF(Load AH with Flags) 标志位送AH指令

SAHF(Store AH into Flgs) AH送标志寄存器指令

PUSHF(PUSH the Flags) 标志进栈指令

POPF(POP the Flags) 标志出栈指令

ADD 加法指令

ADC 带进位加法指令

INC 加1指令

SUB(SUBtract) 不带借位的减法指令

SBB(SuVtrach with borrow) 带借位的减法指令

DEC(DECrement) 减1指领

NEG(NEGate) 求补指令

CMP(CoMPare) 比较指令

MUL(unsinged MULtiple) 无符号数乘法指令

IMUL(sIgned MUL tiple) 有符号数乘法指令

DIV(unsigned DIVide) 无符号数除法指令

IDIV(sIgned DIVide) 有符号数除法指令

CBW(Count Byte to Word) 字节转换为字指令

CWD(Count Word to Doble word) 字转换为双字指令

DAA 压缩的BCD码加法十进制调整指令

DAS 压缩的BCD码减法十进制调整指令

AAA 非压缩的BCD码加法十进制调整指令

AAS 非压缩的BCD码加法十进制调整指令

5、变量在定义的时候需要注意哪些问题:


(1)变量名的使用必须合理且合法具有可读性和容易理解性。


(2)对局部变量定义时必须初始化,若不进行初始化则输出值为随机值。


(3)在函数外定义的变量为全局变量,默认值是0.


6、运算符的优先级:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值