当前位置:   article > 正文

学习笔记:C语言的32个关键字

学习笔记:C语言的32个关键字

一、标准C语言的32个关键字

1、基本数据类型: signed unsigned char int float double short long void
2、构造数据类型: struct union enum
3、数据存储类别: auto static extern register
4、数据优化: const volatile
5、9条基本语句: if else switch case break default while do for return continue goto
6、其它: typedef sizeof

  1. 预编译处理符 “#”
  2. > #include
  3. > #define
  4. > #ifdef
  5. > #ifndef
  6. > #if
  7. > #else
  8. > #else if
  9. > #endif
  10. 等等
1、基本数据类型 
  1. > 1、unsigned :无符号的
  2. //用来声明一个无符号的变量。
  3. unsigned char var; //var的范围:0~255
  4. > 2、signed :有符号的(可以省略不写)
  5. //用来声明一个有符号的变量。
  6. signed char var; //var的范围:-128~127
  7. > 3char :字符型
  8. //用来声明一个字符型变量。
  9. //占一个字节空间
  10. char var;
  11. > 4int :整型
  12. //用来声明一个整型变量。
  13. //C51:占两个字节空间,ARM:占四个字节
  14. int var;
  15. > 5float :浮点型
  16. //用来声明一个浮点型(实型)变量。
  17. //最多能表示到7个有效数据位。
  18. //占四个字节空间
  19. float var;
  20. > 6double :双精度型
  21. //用来声明一个双精度实型变量。
  22. //最多能表示到15~16个有效数据位。
  23. //占四个字节空间 ,有的系统占八个字节
  24. double var;
  25. > 7short :短整型
  26. //用来声明一个短整型变量。
  27. //C51:跟int一样,ARM:占两个字节
  28. short var;
  29. > 8long :长整型
  30. //用来声明一个长整型变量。
  31. //ARM:跟int一样,C51:占四个字节
  32. long var;
  33. > 9void :空型
  34. //表示一个函数没有返回值,或者无形参。
  35. void function(void);
2、构造数据类型 
  1. > 1struct
  2. //用来声明一种结构体类型。
  3. struct stu{
  4. char sex;
  5. int age;
  6. float score;
  7. struct stu *Next;
  8. };
  9. struct stu var;
  10. > 2、union
  11. //用来声明一种共用体类型。
  12. //该类型的变量所在空间的大小以其成员占最大的那个为准,
  13. //存入该变量中的值以程序中最后存入的数值为当前值
  14. union non{
  15. char sex;
  16. int age;
  17. float score;
  18. };
  19. union non var;
  20. > 3enum
  21. //用来声明一种枚举类型。
  22. //规定枚举类型的变量,只能在限定的范围内取值
  23. //否则,编译会出现警告(达到数据安全的效果)
  24. enum em
  25. {a = 23,b,c,d = 56,e}; //其中b=24,c=25,e=57
  26. enum em var;
3、数据的存储类别 
  1. > 1、auto :自动的(可省略不写)
  2. //定义一个局部变量,默认为auto类型的,
  3. //当它所在的函数调用结束时,释放内存
  4. //使用时才分配内存,用完即释放
  5. auto char var;
  6. > 2static :静态的
  7. //①定义一个局部变量,该变量在定义时只进行
  8. //一次初始化,以后每次调用它所在的函数,其值
  9. //都会保持上一次调用的结果,它所在的空间不会
  10. //被释放
  11. //②被static修饰的全局变量,则只能在它所在的C
  12. //源文件中使用,其它文件不能调用,(内部全局变量)
  13. //③被static修饰的函数,只能在该函数所在的C源文
  14. //件中被调用,其它文件不能调用,(内部函数)
  15. static char var;
  16. static void function();
  17. > 3extern :外部的
  18. //①想要调用别的C源文件中的某一个全局变量,
  19. //可以使用该关键字在该文件中修饰声明该变量
  20. //即可调用(前提是该变量没有被static修饰)
  21. //该类型的变量也是一直占着内存不释放
  22. //②想要调用别的C源文件中的某一个函数,
  23. //可以使用该关键字在该文件中修饰声明该函数
  24. //即可调用(前提是该函数没有被static修饰)
  25. extern char var;
  26. extern void function();
  27. > 4、register :寄存器的
  28. //被这个关键字修饰的变量,建议编译器将该变量在
  29. //使用时放到CPU内部寄存器中,以提高执行效率
  30. //注意:该关键字只是"建议",到底有没有将变量放到
  31. //寄存器中无从得知。一般使用在循环次数比较多的
  32. //地方。
  33. //在使用时才分配内存,用完即释放
  34. register long i = 30000;
4、数据优化 
  1. > 1const :常的
  2. //常变量:被const关键字声明的变量,其值不能被改变。
  3. //即在声明该变量时必须要初始化该变量。
  4. //var本身还是一个变量。(数据安全检测)
  5. const char var = 100;
  6. char arr[var]; //试图声明一个长度为100的字符型数组
  7. //在MDK (ARM)中可以使用常变量来声明数组的长度
  8. //在VC++编译环境中也可以。
  9. //在C51-keil中不可以使用常变量来声明数组的长度
  10. char *const p;
  11. //指针变量p不可改变,但是它指向的地址里面的值可变
  12. char const *p; 或 const char *p;
  13. //指针变量p可以改变,但是它所指向的地址里面的值不能改变
  14. const char * const p; //p地址不可改变,里面的值也不能变
  15. > 2volatile :随时会改变的
  16. //被volatile修饰的变量或寄存器会意想不到地发生改变。
  17. //①某些变量或寄存器(如状态寄存器)可能会受硬件影响;
  18. //②在多线程任务中,被其它线程修改(共享内存段);
  19. //③一个在中断服务中使用到的全局变量
  20. //④编译器会对C程序进行优化;
  21. //为了保证程序不被优化,保证CPU取到的数据是最新的
  22. //(即提醒CPU每次都必须到内存中取出变量当前的值而不
  23. //是取cache或者寄存器中的备份),使用该关键字修饰,如:
  24. int *p; *p = 1; *p = 2;
  25. //编译时,编译器会对上面的语句进行优化,
  26. //会直接优化成:
  27. int *p; *p = 2;
  28. //为了保证上面的语句不被优化,加volatile修饰变量:
  29. int * volatile p;
5、9条语句 

四种结构: 

  1. > 1、顺序结构:0//声明语句、运算语句、赋值语句等等
  2. > 2、选择结构:2//多选一
  3. ①、if -else if -else if ... else
  4. if(表达式1)
  5. {语句s;}
  6. else if(表达式2)
  7. {语句s;}
  8. else if(表达式3)
  9. {语句s;}
  10. else
  11. {语句s;}
  12. //用法:顺序判断if后的"表达式"是否为真
  13. //如果碰到为真的情况,则执行其下面的{}里的"语句"
  14. //执行完后,即退出这个"多选一"的结构
  15. ②、switch-case-break
  16. switch(变量)
  17. {
  18. case 常量1:语句;...;break;
  19. case 常量2:语句;...;break;
  20. case 常量3:语句;...;break;
  21. default:语句;
  22. }
  23. //用法:顺序判断"变量"是否与"常量"相等,
  24. //如果相等,则执行该常量:后的"语句s",遇到break即跳出
  25. //这个结构
  26. unsigned char i = 6;
  27. unsigned char dat;
  28. switch(i)
  29. {
  30. case 3:dat = 5;break;
  31. case 5:dat = 34;break;
  32. case 6:dat = 99;break;
  33. case 7:dat = 56;break;
  34. case 6:dat = 100;break;
  35. default:dat = 68; //默认执行
  36. }
  37. //注:如果少了break,则顺序判断i的值与
  38. //case后面的常量是否相等,如果相等,则执行其
  39. //后面的语句,以后不再判断,再继续执行下面的
  40. //每一条case 后面的语句,直到default.
  41. //这种用法不使用!
  42. > 3、循环结构:3
  43. ①、for
  44. for(语句1;语句2;语句3)
  45. {
  46. 语句4;
  47. 语句...;
  48. }
  49. //用法:语句1:条件初始化
  50. // 语句2:判断语句,判断条件是否成立
  51. // 语句3:修改条件语句
  52. //先执行语句1,再进行对语句2的判断,如果成立
  53. //则执行{}里的语句4...,再执行语句3,在判断
  54. //语句2是否依然成立,。当语句2不成立时,结束循环
  55. ②、while
  56. while(表达式)
  57. {
  58. 语句;
  59. ....;
  60. }
  61. //用法:先判断“表达式”是否成立,如果成立
  62. //则执行{}里的语句,执行完再次判断“表达式”
  63. //是否依然成立,成立则继续执行{},不成立则结束
  64. //此循环结构。
  65. 如何来设计一个死循环?两种方法:
  66. for(;;)
  67. while(1)
  68. ③、do-while
  69. do{
  70. 语句1;
  71. ...;
  72. }while(表达式);
  73. //用法:先执行{}里的语句,执行完后,判断
  74. //"表达式"是否成立,如果成立,继续执行{};
  75. //如果不成立,则结束循环
  76. > 4、转移结构:4
  77. ①、break
  78. //仅用于跳出循环结构
  79. //且仅能跳出一层循环结构
  80. for(i=10;i>0;i--)
  81. {
  82. t = 10;
  83. while(t--)
  84. {
  85. dat++;
  86. if(dat == 3)
  87. break;//跳出while()结构。
  88. }
  89. }
  90. ②、continue
  91. //用于终止本次循环,继续从下次循环开始
  92. //正式程序中不使用,仅用于调试程序
  93. char buf = 10;
  94. while(buf--)
  95. {
  96. a++;
  97. b++;
  98. continue;//遇到continue则结束这次循环
  99. d++; //这条永远都不会执行到
  100. e++; //这条永远都不会执行到
  101. }
  102. ③、goto
  103. //无条件转移
  104. //一般都不建议在大的程序当中使用
  105. unsigned char dat=10;
  106. while(dat--)
  107. {
  108. a++;
  109. b++;
  110. Lable: c++;
  111. if(c == 3)
  112. goto Lable;//直接跳到Lable标号去
  113. d++;
  114. }
  115. ④、return
  116. //用于函数返回,
  117. //在函数调用时,遇到return即返回。
  118. //如果需要返回某个值,在其后加上返回值。
  119. //返回值类型必须和函数类型一致。
  120. void function()
  121. {
  122. char a,b;
  123. a++;
  124. return; //遇到return即返回调用处
  125. b++; //不会被执行
  126. return; //不会被执行
  127. }
6、其它 
  1. > 1、typedef : 类型重定义
  2. typedef unsigned char uchar;
  3. //用uchar重新定义unsigned char
  4. #define uchar unsigned char
  5. //用uchar 替换unsigned char
  6. 跟宏定义的区别:
  7. ①、typedef 是在编译阶段进行定义
  8. 宏定义是在预编译处理阶段完成展开
  9. ②、typedef 是类型重新定义,不是简单地替换
  10. 宏定义只是简单的替换,没有定义
  11. typedef unsigned char* M;
  12. #define M unsigned char*
  13. M p1,p2;
  14. //对于typedef来说:p1是指针变量,p2也是
  15. //对于宏定义来说:p1是指针变量,p2是普通变量
  16. > 2sizeof
  17. //用来求类型所占的字节数
  18. int var = 10;
  19. char g;
  20. g = sizeof(var++);//g = 4;
  21. //注意:var++该条语句没有被执行!
  22. //()里的语句是不会被执行的。

二、数据类型关键字

1.基本数据类型(5个) 
  1. > void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果
  2. > char:字符型类型数据,属于整型数据的一种
  3. > int:整型数据,通常为编译器指定的机器字长
  4. > float:单精度浮点型数据,属于浮点数据的一种
  5. > double:双精度浮点型数据,属于浮点数据的一种
2. 类型修饰关键字(4个)
  1. > short:修饰int,短整型数据,可省略被修饰的int
  2. > long:修饰int,长整形数据,可省略被修饰的int
  3. > signed:修饰整型数据,有符号数据类型
  4. > unsigned:修饰整型数据,无符号数据类型
3. 复杂类型关键字(5个)
  1. > struct:结构体声明
  2. > union:共用体声明
  3. > enum:枚举声明
  4. > typedef:声明类型别名
  5. > sizeof:得到特定类型或特定类型变量的大小
4. 存储级别关键字(6个)
  1. > auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配
  2. > static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
  3. > extern:指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明
  4. > const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)

三、流程控制关键字

1.跳转结构(4个)
  1. > return:用在函数体中,返回特定值(或者是void值,即不返回值)
  2. > continue:结束当前循环,开始下一轮循环
  3. > break:跳出当前循环或switch结构
  4. > goto:无条件跳转语句
2.分支结构(5个)
  1. > if:条件语句 else:条件语句否定分支(与if连用)
  2. > switch:开关语句(多重分支语句)
  3. > case:开关语句中的分支标记
  4. > default:开关语句中的“其他”分治,可选
3.循环结构(3个)
  1. > forfor循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件
  2. > dodo循环结构,do 1 while(2);的执行顺序是1->2->1...循环,2为循环条件
  3. > whilewhile循环结构,while(1) 2;的执行顺序是1->2->1...循环,1为循环条件
  4. 以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/633735
推荐阅读
相关标签
  

闽ICP备14008679号