c语言关键字(上)

来源:互联网 发布:dnf提示框源码 编辑:程序博客网 时间:2024/05/22 17:05


关键字:

    c语言中有些单词具有特殊意义,不允许用作标识符,这些单词称为关键字或保留字。


常见关键字:

 

 auto  break   case  char  const   continue  default  do    double else  enum   extern  float  for   goto  if   int    long  register    return    short  signed  sizeof    static  struct  switch  typedef union  unsigned    void   volatile  while


几种特殊关键字:

1、const

   一种修饰符,被const修饰的变量等不可以修改,即意味着“只读”

本质:const在谁后面谁就不可修改,const在最前面则将其后移一位即可,二者等效

1)修饰变量

                   const    int    a=3;

                    int     const   a=3;

  表示a是一个常整型数,其值3不可以被修改。

2)修饰指针

                   const     int   *p;

                    int    *const    p;

                   int    const   *p  const;

      第一个表示p是一个常整数型的指针,其指向的整型数不可以被修改,但指针可以被修改,此常见于函数参数的引用,避免创建参数副本(当你只引用传进来指针所指向的值时应该加上const修饰符,程序中修改编译就不通过,可以减少程序的bug

       第二个表示p是一个整型数的常指针,其指针不可以被修改,但指针指向的整型数可以被修改。

             第三个表示p是一个常整型数的常指针,其指向的整型数不可以被修改,指针也不可以被修改。

3)修饰函数

               void   test()   const

                  {

                      }

     表示此函数为常函数,其类的成员变量不能被修改。

2、static

      声明静态变量或函数。此关键字可设置作用域,限制变量的存储域等。

1)设置变量的存储域;函数体内的局部变量被其修饰,其变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值。

   例:

#include <stdio.h>  void test() {     static int num = 0;              num++;     printf("%d\n", num); }  int main() {          int i = 0;         for(i=0; i<10; i++)         {                 test();           }      return 0; }


    分析:test函数中num被static修饰,输出结果为12345678910,表示num的初值0的内存只被分配了一次;而num不被static修饰,输出结果为10个1,此每次的循环都会取num初值0的内存。


2)限制作用域;在模块内的全局变量被修饰,则变量只能在当前源文件使用。(即能被模块内的函数访问,不能被其模块外其他函数访问)

3)限制作用域;在模块内的static函数只可被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它的模块内。

3、register

   寄存器关键字,将变量存放在cpu当中的寄存器当中,不通过内存寻址访问从而提高效率。

举例:

#include <stdio.h>  int main() {     int i = 0,num=0;    for(i=0; i<10; i++){num=num+i;}printf("num=%d\n",num);    return 0; }  int main()  {  register int i=0;  int num=0;  for(i=0;i<10;i++)  {  num=num+i;  }  printf("num=%d\n",num);  return 0;  }


 比较这两个程序,前面程序中的i是默认的自动变量,在程序调用时是分配临时的存储空间,调用的时候也是从内存中调用的;而后面被register修饰的变量,其值是存放在cpu的寄存器中,调用时直接从寄存器中取出参加运算,存放在寄存器中的变量值调用需要的时间短,从而节省了内存。


 register使用时需要注意的几点:


1)只有局部自动变量和形式参数可以作为寄存器变量,其他(如全局变量)不行。

2)register变量不可能放在内存中,不能用“&”来获取register变量的地址。

3)一个计算机系统中的寄存器数目是有限的,不能定义多个寄存器变量。

4)局部静态变量不能定义为寄存器变量。

5)register变量必须是能被cpu所接受的类型。意味着register必须是一个单个的值,并且长度应该小于或等于整型的长度。