c语言基础04

来源:互联网 发布:果冻手表淘宝 编辑:程序博客网 时间:2024/06/16 08:49

1.switch 的使用

  switch(整型参数)

{

  case 常量 :

            语句1;

            break;

 case 常量 :

           语句2;

           break;

 case 常量 :

          语句3;

          break;

 case 常量 :

         语句4;

         break;

 default:

         语句5;

         break;

}

例:

void Grade(char n)
{
    switch (n)
    {
    case 'A':
        printf("85-100分");
        break;
    case 'B':
        printf("70-84分");
        break;
    case 'C':
        printf("60-69分");
        break;
    case 'D':
        printf("0-60分");
        break;
    default:
        printf("您输入的成绩错误!");
        break;
    }
}
int main()
{
    Grade('A');
    getchar();
}


注意:switch可用if替换,但比较4个及4个以上的用switch比if高效

2.const 与宏定义的区别

 (1)实现机制

     宏是预处理命令,即在预编译阶段进行字节替换。const常量是变量,在执行时const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态存储区的只读数据区。根据c/c++语法,当你声明该量为常量,即告诉程序和编译器,你不希望此量被修改。 程序的实现,为了保护常量,特将常量都放在受保护的静态存储区内。凡是试图修改这个区域内的值,都将被视为非法,并报错。

(2)用法区别

    a.define是宏定义,程序在预处理阶段将用define定义的内容进行了替换。因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存const定义的常量,在程序运行时在常量表中,系统为它分配内存

    b.define定义的常量,预处理时只是直接进行了替换。所以编译时不能进行数据类型检验。const定义的常量,在编译时进行严格的类型检验,可以避免出错

   c.define定义表达式时要注意“边缘效应”,例如:
#define N 3+8 //    int a = N/2;我们预想的N值是11    //我们预想的a的值是5,可实际上a的值是7   //原因在于在预处理阶段,编译器将 a = N/2处理成了 a = 2+3/2  //  这就是宏定义的字符串替换的“边缘效应”   //  因此要如下定义:#define N (2+3)。

      const定义的表达式则没有上述问题。const定义的常量叫做常变量原因有二:const定义常量像变量一样检查类型;const可以在任何地方定义常量,编译器对它的处理过程与变量相似,只是分配内存的地方不同。

3.关于宏函数

 (1)函数的参数必须声明为特定的类型,它只能在类型合适的表达式使用,而宏函数没有类型,任意整型、长整、单精度浮点型、双精度浮点型等都可以使用。但预处理器不做参数类型检查,所以危险性高。

(2)使用宏定义在代码规模和速度方面都比函数更胜一筹,使用宏的不利之处在于每次使用宏时,一份宏定义代码的拷贝都会插入到程序中。除非宏非常短,否则使用宏会大幅度增加程序的长度。

(3)//宏定义写出swap(x,y)交换函数
    #define swap(x, y)\
   x = x + y;\
   y = x - y;\
   x = x - y;                  //
每一个换行的时候必须加上一个 "\ "

(4)在执行复杂功能时,如递归,函数式宏定义往往会导致较低的代码执行效率。

4.汇编语言      转载:http://blog.sina.com.cn/s/blog_59ca605c0100g3mx.html

原创粉丝点击