您的位置:首页 > 编程语言 > C语言/C++

c语言关键字

2017-05-14 19:36 162 查看
转自:http://blog.csdn.net/xmzzy2012/article/details/43236403?locationNum=3&fps=1

C 语言标准定义的32 个关键字

 1、auto 声明自动变量,缺省时编译器一般默认为auto

2、int 声明整型变量
3、double 声明双精度变量:双精度浮点型

4、long 声明长整型变量

5、char 声明字符型变量
6、float 声明浮点型变量:单精度浮点型

  6.1 float的有效位通常有6位,指的是小数点后面有6位数,四舍五入。


         6.2 通常不将float与一个具体值进行比较,因为float在系统中只是存储一个相接近的值。

  6.3 float存储的是接近值,所以只能在某个精度内比较。如if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON))

7、short 声明短整型变量

8、signed 声明有符号类型变量

  8.1、如果没有写符号类型,则系统默认为有符号型。最高位代表符号位,0代表正,1代表负。

  8.2、符号位参与运算,如果最高位有进位或者借位,则改变最高位


  8.3、如果一数位数超出了类型表示范围,只取类型存储位数后几位。

  例如 char a= -129;

  系统中负数用补码表示。负数的补码 = 正数绝对值按位取反+1

  129在系统中二进制表示: 0 1000 0001

               按位取反:1 0111 1110

                                               +1:1 0111  1111

        因为129超出了char的表示范围,只取类型对应的位(截断)。

  因此,a = 0111 1111 =0x7f

9、unsigned 声明无符号类型变量  

10、struct 声明结构体变量

         10.1 空结构体占用1字节(系统最小单位1字节,生活中无法造出0大小的模子。同理malloc无法返回0字节) 

          10.2 结构体大小不包含柔性数组。柔性数组只能算是数组的特殊成员。

   struct {

                int i;

                int array[]


            }A;

           sizeof(A) = sizeof(i)=4;

           (A*) p = (A*)malloc(sizeof(A)+100*sizeof(int));即array指向100的数组起始单元

11、union 声明联合数据类型

        union开辟足够的空间来存储多个数据成员中的一个。

  所有成员公用一个存储空间,同一个时间只能存储(操作)其中一个

  union{

             int i;

             char array[2];


        }U;

       U.array[0]=0x38;

       U.array[1]=0x39;

       U.i =0x3938;

       利用union判断系统的大小端(一个数据(非结构体)高低字节与存储位置高低字节)

  union{

            int i;

            char cVal;


        }U;

       U.i=1;

       if{ U.c ==1}

              小端

  else

              大端

12、enum 声明枚举类型

  12.1enum变量类型可以给字符常量赋值,如果不赋值系统自动从被赋初值的那个常量开始依次加1,如果都没赋值从0开始依次加1.

    sizeof(enum) = sizeof(int),enum代表一个枚举常量,代表一个整数

  12.2枚举与宏定义区别

             1枚举是一个集合代表一类值,宏定义不是 

             2枚举可以自增1,这样不用每个值都定义,而宏必须每个值都定义

13、static 声明静态变量

14 、switch 用于开关语句

    case 后面的值必须为整型值(int,字符常量,字符串常量const修饰的变量不行被当做变量处理)

    default 开关语句中的“其他”分支

15、break 跳出当前循环
16、register 声明寄存器变量

  16.1 高速系统尽量将变量存放在寄存器中,寄存器数量有限,不一定所有声明的变量都放在寄存器中

  16.2 因为变量有可能放在寄存器中,而非内存里,所以内存寻址&不一定可以找得到

  16.3 register变量必须是一个可被接受的变量(意味着结构体可能失败),长度小于等于整型。

  16.4 通常一个变量使用频率很高,编译器会自动将该变量存储在寄存器上,加快响应速度。(volatile用法)

17、const 声明只读变量:const int MAX_LENGTH = 100,int array[[b]MAX_LENGTH]; //错误,[b]MAX[/b]不是常量,而是一个只读变量[/b]

  const定义的变量存储在静态区,整个系统只有一个拷贝。而define定义的则有若干个拷贝。


18、volatile 表明该变量容易被编译器未知的因素改变比如硬件、其他线程等,要求编译器访问该变量时不要进行优化。(register修饰)
19、typedef 用以给数据类型取别名(当然还有其他作用)

  19.1 Stu_pst const stu,const Stu_pst stu都表示stu指向的对象不能被改变,这里Stu_pst代表数据类型,看作一整体,固忽略数据类型

  19.2 typedef作语法分析时作存储类型判断

    存储类型指示符:extern\static\auto\register,因此typedef不能与这几个存储类型连用。每个变量只能有一种存储类型


    所以typedef static int INT 错误


  19.3 typedef不支持类型扩展,比如unsigned INT j 错误。

  19.4 typedef声明的是一种数据类型别名,#define只是做宏展开。

          typedef int * INT_P


                 INT_P a,b; 定义ab都是INT型

    #define int* INT_P;

                 INT_P a,b;展开成int *a,b;表示a是一个指针变量,但b是一个整型变量

20、extern 声明变量是在其他文件正声明(也可以看做是引用变量)

21、return 子程序返回语句(可以带参数,也可不带参数)

22、void 声明函数无返回值或无参数,声明空类型指针

23、continue 结束当前循环,开始下一轮循环

24、do 循环语句的循环体

  while 循环语句的循环条件

25、if 条件语句
  else 条件语句否定分支(与if 连用)

  if空语句

  if(条件) ;  = if(条件)

        Nop; //空语句

          

26、for 一种循环语句(可意会不可言传)

27、goto 无条件跳转语句
28、sizeof 计算对象类型所占内存空间大小,

29、bool与0值比较

  if(bTest),if(!bTest) 正确 bTest非0代表真

  if(bTest == True ) //错误,因为不同系统对True定义不同1,-1都有

30、float与0值比较

  由于float只是一个近似值,不能直接和0进行比较。只能在某个精度范围内比较

31、指针与0比较

  if(!p),if(p==0) //将p作int判断,错误

  if(p),if(!p) //将p做bool型判断,错误

  if(NULL==p),if(NULL!=p) //正确

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: