A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xushengbin 中级黑马   /  2016-6-28 14:37  /  1202 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xushengbin 于 2016-6-28 14:37 编辑

If you give someone a program , you will frustrate them for a day ; if you teach them how to program , you will frustrate them for a lifetime , but for you , maybe I just this person . 希望接下来的一段时间能够和大家一起探讨、学习 !
附件是这个笔记gitbook样式 , 附带目录 , 下载后请双击index文件 .

在这里, 对于C语言中32个关键字作一个汇总 , 我这边主要分为5类
  • 数据类型
  • 顺序结构
  • 循环结构
  • 修饰变量
  • 运算符
让大家对C语言关键字有一个宏观的了解 , 有助于对C语言的进一步学习 .
基本数据类型
  • int
    • 整型
    • 4个字节
    • 取值范围 : -2^31 -- 2^31-1
  1. int 变量名 ;

  2. printf(); 打印变量的值占位符为 : %d

  3. 补充 :
  4.     %02d 域宽为2位 , 不足2为用0补
复制代码
  • float
    • 单精度浮点型
    • 4个字节
    • 取值范围 : -2^31 -- 2^31-1
  1. float 变量名 ;

  2. 赋值注意 : 3.14f , 1.1f  别忘了后面的f , 不然编译器就认为你这个是double类型了

  3. printf(); 打印变量的值占位符为 : %f

  4. 补充 :
  5.     %.2f   保留小数点后2位
复制代码
  • double
    • 双精度浮点型
    • 8个字节
    • 取值范围 : -2^63 -- 2^63-1
  1. double 变量名 ;

  2. printf(); 打印变量的值占位符为 : %lf

  3. 补充 :
  4.      %.2lf   保留小数点后2位
复制代码
  • char
    • 字符型
    • 1个字节
    • 取值范围 : -2^7 -- 2^7-1
  1. char 变量名 ;

  2. printf(); 打印变量的值占位符为 : %c
复制代码
以上统称基本数据类型




  1. 对于基本数据类型的定义与赋值分2种 :
  2.     1. 先定义 , 后初始化
  3.         int num;
  4.         num = 30;

  5.     2. 定义的同时初始化
  6.         int num = 30;

  7. 补充 : 键盘接收赋值        
  8.         int num;
  9.         printf("请输入一个整型数 : ");
  10.         scanf("%d",&num);
复制代码


构造类型
  • struct
    • 构造类型 / 结构体
    • 存储空间 : 所有元素占用空间之和(考虑对齐)
      • 逐个元素对齐(下个元素与之前所有元素之和对齐)
      • 整体对齐(最后的和能单独整除所有元素)--> 最后能整除最长类型


区分结构体类型 , 结构体变量 , 结构体别名
结构体类型
  1. //结构体类型 :  这个仅仅只是定义的类型
  2. struct Car{
  3.     int lunzi; //轮子
  4.     char *pp;  //品牌
  5. };
复制代码
结构体变量
  1. //结构体类型 :  这个仅仅只是定义的类型
  2. struct Car{
  3.     int lunzi; //轮子
  4.     char *pp;  //品牌
  5. }car;

  6. 变量名为 : car
复制代码
结构体类型起别名
  1. typedef struct Car{
  2.     int lunzi; //轮子
  3.     char *pp;  //品牌
  4. }iCar;

  5. 对结构体类型 :struct Car 起了别名: iCar
复制代码
  • union (用得少 , 知道是个关键字 , 知道是个类型名称就可以)
    • 构造类型 / 共用体
    • 解释 : 里面的元素类型公用一块内存区域

  • enum
    • 构造类型 / 枚举
    • 引出 : 在实际问题中 , 有些变量的取值被限定在一个有限的范围内 , 例如 : 一个星期只有7天 , 一年只有12个月等等 , 如果把这些量说明为整型 , 字符型等是不太妥当的 , 因为一周不能被赋值为8天 , 枚举类型 , 就是列举所有可能的取值 .
    • 一般形式 : enum 枚举类型名 {枚举值列表} ;

区分枚举类型 , 枚举变量 , 枚举别名
枚举类型
  1. //枚举类型 :  这个仅仅只是定义的类型
  2. enum Sex{kSexMan,kSexWomen,kSexYao};
复制代码
枚举变量
  1. //枚举变量 :  这个定义了类型 , 还定义了变量
  2. enum Sex{kSexMan,kSexWomen,kSexYao} sex;

  3. 变量名为 : sex
复制代码
枚举类型起别名
  1. typedef enum Sex{kSexMan,kSexWomen,kSexYao} iSex ;

  2. 对结构体类型 :enum Sex  起了别名: iSex
复制代码
特殊的定义类型
  • typedef
  1. //-------------------typedef定义类型
  2. 定义:给已经存在的数据类型取一个别名
  3. 格式:typedef 原类型 新类型名; //新类型名尽量要大写

  4. 1、基本数据类型
  5. typedef int  MALATANG;  别名: MALATANG

  6. 3、给结构体其别名
  7. typedef struct Person P;  别名: P
  8. typedef struct { int screenSize; int ram;} IPHONE; 别名: IPHONE

  9. 4、给枚举类型起别名
  10. typedef enum Sex{kSexMan,kSexWomen,kSexYao} iSex;  别名: iSex



  11. //以下了解:-----------------------------------
  12. 2、用在数组,给数组起别名
  13. typedef int  ARRAY[5];  别名: ARRAY

  14. 3 函数指针 , 给函数指针起别名
  15. typedef void (*FUN)();  这个是一个无参无返回值函数指针变量的别名 , 别名 : FUN  (注意我的描述)
复制代码



空类型空类型引出函数
  • void
用于返回值类型 , 返回值类型为void , 表示无返回值 , 无返回值意味值被调函数不需要返回数据给主调函数

  • retrun
return关键字就是用于 被调函数返回数据给主调函数

顺序结构
结构体化程序是一个设计思想,规定了一套方法,使程序具有合理的结构,以保证和验证程序的正确性. 这种方法要求程序设计者不能随心所欲地编写程序,而要按照一定的结构形式来设计和编写程序. 它的一个重要目的是使程序具有良好的结构,使程序易于设计,易于 理解,易于调试修改,以提高设计和维护程序工作的效率.
  • 顺序结构
  • 分支结构 if / if..else.. / if..else if.. / if..else if..else..
  • 循环结构
IF语句
  • if
  • else
  1. 注意点:  分号是语句的结束,在C语言中只要是语句,都一定会有分号

  2. //----------if语句-----------//

  3. ## 一般形式(第一种形式):表示如果表达式为真,执行语句块1,否则不执行。
  4. //一:     if
  5. if(判断表达式)
  6. {

  7.     语句块1;

  8. }


  9.     .......

  10.     后续语句;



  11. //二:    if...else
  12. if ...else ...语句使用
  13. ## 如果表达式为真,则执行语句块1,否则执行语句块2
  14. if(表达式)
  15. {
  16.     语句块1;

  17. }else{

  18.     语句块2;
  19. }



  20. //三:      else if
  21. ## 如果表达式1为真,则执行语句块1,否则判断表达式2,如果为真执行语句块2,否则再判断 表达式3,如果真执行语句块3, 当表达式1、2、3都不满足,会执行最后一个else语句。
  22. if(表达式1)
  23. {
  24.     语句块1;

  25. }else if(表达式2){

  26.     语句块2;

  27. }else if(表达式3){

  28.     语句块3;

  29. }else{

  30.     语句块4;
  31. }



  32. 了解+理解:

  33. //四.if(表达式)   省略括号     if的作用范围一直到;结束
  34. ##   开发坚决不要省略括号

  35. if(表达式)
  36. 语句1;
  37. 语句2;

  38. -----
  39.     |
  40.     |
  41.     V

  42. if(表达式){

  43.     语句1;

  44. }
  45.     语句2;


  46. 试做一题:
  47. int a=1;

  48. if (a>1) {

  49.     printf("a>1\n");

  50. }else if(a++){

  51.     printf("a>2\n");

  52. }else if(a>3){

  53.     printf("a>3\n");

  54. 打印哪几句 ? 还是其中一句 ?

  55. //-------------------if值得注意的地方
  56. 注意点:

  57. 1.分支语句只会执行其中一个分支
  58. 2.省略括号只对下一条语句有效

  59. if(表达式)
  60.     语句1;
  61.     语句2;

  62. if(表达式){
  63.     语句1;
  64. }
  65.     语句2;



  66. 3.分支语句可以嵌套
  67. if(表达式1){

  68.     if(表达式2){

  69.     }

  70.     }else{

  71. }

  72. 4.省略括号后下一句不允许定义变量  //记忆
  73.     if(表达式)
  74.     int a = 0;

  75.     printf("xxx");


  76. //  可以这么写也可以不这么写,关键你要知道 = (赋值),与 ==(关系运算)的区别
  77. 5.==判断的时候建议常量写在前面

  78. int a = 0;

  79. if(0 == a){   //判断
  80.     ......
  81. }

  82. -----------


  83. if(a = 0){  //赋值   把0赋值给a,最后以a的值作为表达式的值

  84. ....

  85. }

  86. //------------

  87. if(a==0){   //判断  看a是否等于0

  88.     printf("a");

  89. }
  90. printf("b");
复制代码
switch语句
  • switch
  1. //---------switch分支语句-----------//
  2. 1)使用格式
  3. switch(表达式){   //switch 表达式 必须是 整型常量,整型变量或者整型表达式,或者字符变量,字符常量
  4.     case 常量1: 语句1;       //case   常量表达式  必须是整型 常量  'a'
  5.     case 常量表达式2: 语句2; ...
  6.     case 常量表达式n: 语句n;
  7.     default: 语句n+1;
  8. }

  9. 其语义是:
  10.    计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如 表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
复制代码
  1. //---------switch分支值得注意的地方---------//
  2. 1) 表达式的类型(case语句后的值)必须是整型或可以转变为整型的值 (short、char和int类型)。
  3. 整型变量    整形常量   返回值是整形的表达式   可以装换为int类型的表达式
  4. 2) 功能代码部分可以写任意多句。
  5. 3) case语句可以有任意多句,可以不用加括号“{}”
  6. 4) break关键字的意思是中断,指结束switch语句,break语句为可选。
复制代码
  1. 1)case的值1、值2...值n只能为整型常量(整数),不能为变量。
  2. 2)case后面不可以直接定义变量
  3. 如果在case后面定义的变量必须加上大括号

  4. 执行流程:在执行的过程中,如果遇到break语句,则跳出switch语句。如果没有遇到break 语句,则一直执行到switch语句的结束。
复制代码





case
  • case
  1. //---------case语句的穿透问题-----------//
  2. case语句执行的过程中,一旦进入某个分支后就会一直执行到switch结束。
  3. 为了避免上述情况,使用break语句,可以跳出switch语句.
复制代码


default
  • default
  1. 所有case条件不匹配 , 最后就执行deault中的语句
复制代码
break
  • break
  1. 结束break
复制代码
循环结构引出循环 :




  1. //---------循环结构-----------//
  2. 循环结构是程序中一种很重要的结构。
  3. 其特点是,在给定条件成立时,反复执行某程序段, 直到条件不成立为止。给定的条件称为循环条件,
  4. 反复执行的程序段称为循环体。
  5. 循环结构简单来说就是:循环是一次又一次的执行相同的代码块

  6. //  7次  格式
  7. while语句;
  8. do-while语句;
  9. for语句;

  10. 一般来说   一个循环需要以下几部分构成:

  11. 1)循环控制条件  循环退出的主要依据,来控制循环到底什么时候退出
  12. 2)循环体       循环的过程中重复执行的代码段
  13. 3)能够让循环结束的语句(递增、递减、真、假等) 能够让循环条件为假的依据,否则退出循环
复制代码
while语句
  • while
  1. //---------while循环-----------//
  2. while ( 条件表达式 )
  3. {
  4.     语句1;
  5.     语句2;
  6.     ....(让条件表达式为假/有一句可以让循环结束)
  7. }


  8. 1)while循环的特点:
  9. 如果while中的条件一开始就不成立,那么循环体中的语句永远不会被执行

  10. 2)while语句的语义是:
  11. 如果条件成立,就会执行循环体中的语句“循环体”。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环
复制代码
dowhile语句
  • do
  1. //---------do-while-----------//

  2. while(条件){
  3.     语句块;
  4. }
  5. 当型循环:当条件满足的时候,再去执行循环体


  6. do {
  7.     语句1;
  8.     语句2; ....
  9. } while ( 条件 );
  10. 直到型循环:先执行循环体,然后判断条件,直到条件为假就结束

  11. 1)do...while语句的语义
  12. 2)do-while循环的特点:
  13. 不管while中的条件是否成立,循环体中的语句至少会被执行一遍

  14. 对比:
  15. while    是先判断再执行    30%
  16. do-while 是先执行再判断    5%
  17. 当循环条件第一次判断不为假的时候,while和do-while执行的次数相同,为假,do-while会执行一次
复制代码
  1. //---------while的死循环-----------//
  2. 死循环:就是一直都执行循环体中的代码,不会退出

  3. while(条件);
  4. 1)不知道要循环的次数的时候使用最佳 常常妙用死循环
  5. 2)在某个范围內查找满足条件的值

  6. 终端终止操作:   control+c
复制代码
for语句
  • for
  1. //---------for循环-----------//
  2. 一般形式:

  3. for( 表达式1 ; 表达式2 ; 表达式3 ) {

  4.     语句;


  5. }


  6. for循环执行过程
  7. (1) 先求解表达式1。
  8. (2) 求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下 面 第(3)步。若为假(值为0),则结束循环,转到第(5)步。
  9. (3) 求解表达式3。
  10. (4) 转回上面第(2)步骤继续执行。
  11. (5) 循环结束,执行for语句下面的一个语


  12. for语句常见的形式:

  13. for(循环变量赋初值;循环条件;循环控制语句)





  14. for(int i = 0; i<10 ; i++){

  15.     语句块;

  16. }


  17. 改写成: while



  18. int i = 0;

  19. while (i<10){

  20.     语句块;

  21.     i++;
  22. }


  23. //---------for循环值得注意的地方-----------//
  24. 1)表达式省略(三个表达式都可以省略)
  25. 如:for(; ;) 语句相当于while(1) 语句


  26. 了解:
  27. 2)循环控制无关的任意表达式

  28. 表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。
  29. for(int i=1,j=0;i<=100;i++,j++)


  30. //---------for循环的嵌套-----------//

  31. //第一种理解方式:把打印一行的代码,执行了5次
  32. for (int j=0; j<5; j++) {
  33.     //打印一行 * ,有5个

  34.     for(int i=0;i<5;i++){
  35.         printf("*\t");
  36.     }


  37.     printf("\n");
  38. }
  39. //外层控制行数,里层控制列数
复制代码
contine
  • contine
  1. //---------continue-----------//
  2. continue语句的作用是跳过循环体中剩余的语句而继续下一次。
  3. continue语句只用在 for、while、do-while等循环体中,常与if条件语句一起使用,用来"加速循环"。

  4. break的用法:
  5. while(表达式1){
  6.     ......
  7.     if(表达式2) break;
  8.     ...... }

  9. continue的用法:
  10. while(表达式1){
  11.     ......
  12.     if(表达式2) continue;
  13.     ...... }
复制代码
break
  • break
  1. //---------break-----------//
  2. break和continue语句都可以用在循环中,用来跳出循环(结束循环);
  3. break语句还可以用 在switch语句中,用来跳出switch语句。

  4. 当break语句用于
  5. do while
  6. for
  7. while
  8. 循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与while语句联在一起,即满足条件时便跳出循环。

  9. 注意:
  10. 1)break  用在循环与switch中
  11. 2)在多层循环中,一个break语句只向外跳一层。
复制代码
修饰变量






const
  • const
  1. const修饰的变量 , 是只读的 , 内容不可该
复制代码
const与变量搭配使用

  1. const int num = 1;

  2. num++;     //错误

  3. num = 20;  //错误

  4. Cannot assign to variable 'num' with const-qualified type 'const int'
复制代码
总结 : const修饰的变量 , 可读不可改
const与指针变量搭配使用
const 在 * 前面 : 指针的指向可以变 , 地址对应的值不可变
  1. int num = 10;

  2. const int *p = #
  3. int const *p = #

  4. 指针的指向可以变 , 地址对应的值不可变

  5. p = &num2; //这个可以

  6. 但是 *p = 30;  // 这个错误  Read-only variable is not assignable
复制代码
const 在 * 后面 : 指针的指向不可以变 , 地址对应的值可变
  1. int num = 10;

  2. int * const p = #

  3. 指针的指向不可以变 , 地址对应的值可变

  4. p = &num2 ;  //这个错误  Read-only variable is not assignable

  5. *p = 10;   //  这个可以
复制代码
  1. 理解:  1.
  2. const int *p;    常量指针   指向常量的指针   所以值不能变,指向可变
  3. int const *p;

  4. int * const p;   指针常量   这是个常量      指向不可变,值可变
复制代码
最后 , 如果还是没法懂 , 就强行记忆 :
  1. const 在 * 的左侧      指向可变,值不能变
  2. const 在 * 的右侧     指向不可变 值可变
  3. const 在 * 的两侧     指向和值都不可以变
复制代码
整型变量修饰符
以下4个修饰符只能修饰整型
  • short
  1. short num ;  // 占2个字节的整型
复制代码
  • long
  1. long num ;   //  占8个字节的整型
复制代码
  • signed
  1. 定义变量默认被signed修饰 , 代表有符号的整型
复制代码
  • unsigned
  1. 定义变量默认被signed修饰 , 代表无符号的整型 .

  2. 当然 unsigned char ch;  也是正确的  因为char类型底层是字符通过ASCII码转成二进制的整型保存在内存中 , char也分符号
复制代码




static和extern
  • static

    • 修饰函数
      • 被static修饰的函数都为内部函数 , 只能在本文件中使用
    • 修饰全局变量
      • 被static修饰的全局变量都为内部变量 , 只能在本文件中使用
    • 修饰局部变量
      • 被static修饰的局部变量 , 为静态变量 , 保存在静态区(全局区) , 作用域范围不变, 延长变量的声明周期

  • extern

    • 定义的函数 , 全局变量 , 默认被extern修饰 , 可以跨文件使用
    • 被extern修饰的函数都为外部函数 , 可以多文件使用
    • 被extern修饰的全局变量都为外部变量 , 可以多文件使用
    • extern不能修饰定义局部变量(无意义)

补充 :
  • auto
  1. 定义局部变量 , 默认就是auto修饰的

  2. 表示系统会自动回收此局部变量 , 在作用域结束位置
复制代码




用关键字复习C语言.zip

1.02 MB, 下载次数: 2

售价: 1 黑马币  [记录]

2 个回复

倒序浏览
希望可以帮助刚学习完C的同学们 , 学前觉得C是一座高山 , 学完了发现C真的是一座高山 , 所以我们只能使劲往上爬 , 爬着爬着发现风景越来越美 .
回复 使用道具 举报
很全面,很赞,学习复习都好用
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马