• C语言复习


    1 编辑、编译、链接

    2 printf scanf用于显示器

    fprintf fscanf用于文件

    sprintf sscanf用于字符串

    3 面试的时候必须注释,否则人家当你没有工作经验

    4 全局变量有声明和定义的区别,局部变量不区分声明和定义,都是定义

    5 声明可以有多个,定义只能有一个

    6printf不会进行数据类型转换

    7 自动转换和与强制转换,赋值的时候会自动转换,int num=3.5;int是3,+-*/会自动转换

    8 常量,一旦赋值,不能修改。#define const都是常量。const只是限定代码不能直接修改。变量,可以修改。

    9 标识符用于函数名称,变量名称

    10 代码要注意软件工程规范

    11 scanf("a=%d",&a);要输入a=10

    12printf, scanf格式控制

    13 C语言把所有设备当作文件处理。stdin键盘stdout显示器stderr错误stdprn打印机

    14 运算符的优先级和结合性,解析复杂表达式

    ++自增1,*间接运算符,优先级一样,自右至左

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 main()//++自增1,*间接运算符,优先级一样,自右至左
     7 {
     8     int a[5] = { 1,2,3,4,5 };
     9     int *p = a;
    10 
    11     //printf("%d
    ", *p++);//结果1,等价于*(p++)
    12 
    13     //printf("%d
    ", *++p);//结果2
    14 
    15     printf("%d
    ", ++*p);//结果2
    16 
    17     system("pause");
    18 }

    15 赋值运算,嵌入式赋值,赋值会自动转换数据类型

    16 逻辑与,用于某些灯泡强行关闭,某些灯泡不变。

    逻辑或,用于某些灯泡强行开启,某些灯泡不变。

    异或,记忆:民政局,同性0,异性1

    17 while, do...while, for, 递归

    18 break, continue

    19 逻辑表达式,关系表达式

    20 注意逻辑表达式短路效应

    短路:与

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 main()
     7 {
     8     int a = 10;
     9     int b = 0;
    10     printf("%d
    ", b && ++a);
    11     printf("%d
    ", a);
    12 
    13     system("pause");
    14 }

    短路:或

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 main()
     7 {
     8     int a = 10;
     9     int b = 0;
    10     printf("%d
    ", a || ++b);
    11     printf("a=%d,b=%d
    ", a, b);
    12 
    13     system("pause");
    14 }

    21 整数的极限#include <limits.h>

    22 八进制0开头

    十进制

    十六进制0x开头

    23 整数常量的后缀

    10

    10u无符号型

    10l长整型

    24 浮点,就是浮动的小数点

    long long %ll 用于处理海量数据,占8个字节

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 main()
     7 {
     8     long long data = 1234567890;
     9     printf("%lld
    ", data);
    10 
    11     printf("sizeof(long long)=%d", sizeof(long long));
    12 
    13     system("pause");
    14 }

    25 long double %lf 打印浮点数,超过8个字节就是%llf

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 main()
     7 {
     8     printf("sizeof(long double)=%d", sizeof(long double));
     9 
    10     system("pause");
    11 }

     

    26 short int等价于short,double float等价于double

    27 必须掌握中文处理,宽字符,宽字符串的增删查改

    28 缓冲区的概念,sizeof不是函数,而是运算符

    29 return和函数参数会自动进行数据类型转换

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 int add(int a, int b)//形参自动把实参10.0转换为int类型
     7 {
     8     return a + b + 10.0;
     9 }
    10 
    11 main()
    12 {
    13     printf("%d
    ", add(10.0, 10));
    14 
    15     system("pause");
    16 }

    30 强制类型转换(int)10.9

    问:什么时候用到强制类型转换?

    printf不会自动转换

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 main()
     7 {
     8     double db = 10.9;
     9 
    10     printf("%d
    ", (int)db);//printf不会自动转换
    11 
    12     system("pause");
    13 }

    31 数组需要理解顺序排列。指针访问,选择排序、冒泡排序、插入排序

    32 指针循环数组,for(int *p=a;p<a+10;p++)

    33 函数一定要有返回值,函数参数传递的顺序,从右到左

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 main()
     7 {
     8     int num = 10;
     9 
    10     printf("%d,%d
    ", num, num++);
    11 
    12     system("pause");
    13 }

     

    34 数组是参数唯一没有副本机制,结构体数组、指针数组同理。数组作为参数,传递地址,数组退化为指针,指针数组退化为二级指针

    35 函数改变一个外部变量,需要地址,改变一个外部指针,需要二级指针

    36 3BAT必须搞定快速排序法 

    37 可变参数的函数,回调函数学会实现劫持

    38 指针是一种数据类型,类型决定了步长、解析方式

    39 *p++ ++*p指针的运算,+-,指针的运算与类型密切相关

    40 指针遍历数组,二级指针遍历指针数组,指向函数指针的指针遍历指针数组

    41 int a[10];实际上a是int *类型

    int *a[10];实际上a是int **类型

    42 int a[3][4];实际上a是int (*)[4]类型

    三者区别:

    &a整个数组

    *a列指针

    a行指针

    43 理解指针与数组的区别,字符串是''结尾

    char *p="123";

    p存储了地址

    char str[100]="123";

    str存储了字符串

    p=str;//OK

    44 字符串 memcpy,memset, strcat, strcmp, strcpy, strstr, puts, gets, printf, scanf, sprintf, sscanf 亲自实现

    45 #define替换

    #include包含

    #undef 取消#define的作用范围

    #if...#elif...#else...#endif

    #ifdef...#endif

    #ifndef...#endif

    46 C语言内联函数就是#define

    问:什么时候用到内联函数?

    提升效率

    #define X(n) n*n*n

    带参数的宏定义

    问:如何规避以下问题?

    #define X(n) (n)*(n)*(n)

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 #define X(n) n*n*n
     7 
     8 main()
     9 {
    10     printf("%d
    ", X(3));
    11 
    12     printf("%d
    ", X(1 + 2));
    13 
    14     system("pause");
    15 }

     

    47 #标识符添加""

    ##链接标识符

    #define要用换行

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 #define Run(M) system(M);
     7 printf("%s
    ", M);
     8 
     9 main()
    10 {
    11     Run("calc");
    12 
    13     system("pause");
    14 }

    48 一般头文件只能存放声明,不要存放定义,避免重复包含。

    如果头文件存放定义,应该加上预编译,防止重复包含。

    1 #ifdef M
    2 #define M
    3 int add(int a, int b)
    4 {
    5 
    6 }
    7 #endif

    49 C的结构体不可以有方法,但是C++可以有

    如何让C的结构体实现有方法?

    使用函数指针 

    50 结构体只有初始化可以直接赋值,可以赋值另外一个结构体变量的值

    ->访问方式

    .访问方式

    1     struct info info1 = { 1,"123" };
    2     struct info info2;
    3 
    4     info2 = { 1,"123" };//错误
    5     info2 = info1;//正确

    51 枚举体,共用体(主要用于嵌入式),理解位域的概念

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 struct in
     7 {
     8     char ch : 3;//位域,节约内存
     9     char ch1 : 4;
    10 };
    11 
    12 main()
    13 {
    14     printf("%d
    ", sizeof(struct in));
    15 
    16     struct in in1;
    17     in1.ch = 20;
    18 
    19     printf("%c
    ", in1.ch);
    20 
    21     system("pause");
    22 }

    52 calloc, malloc, realloc三大内存分配方式

    53 数组优点:查询,修改

    链表优点:插入,删除

    二叉树可以综合以上优点

    54 函数指针,可以实现回调(劫持)

    55 指针数组,数组指针

    56 声明四大变量auto, extern, register, static

    57 const 限定不能直接赋值

    58 VC只是建议,GCC就是强制,volatile会自动从内存读取,防止变量被意外修改而不知道

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 #include <time.h>
     6 
     7 main()
     8 {
     9     time_t start, end;
    10     double res = 0;
    11 
    12     time(&start);//获取时间,传递给start
    13 
    14     for (volatile int i = 0;i < 999999999;i++)
    15     {
    16         res += i;
    17     }
    18 
    19     printf("%f
    ", res);
    20 
    21     time(&end);//获取结束时间
    22     
    23     printf("消耗时间%f
    ", difftime(end, start));
    24     
    25     system("pause");
    26 }
  • 相关阅读:
    【全过程详解】如何恢复联想隐藏的内存(分区教程)
    【全过程详解】如何安装最纯净、稳定、无更新的win10系统(下载+U盘制作+安装+win10激活+驱动更新)
    第一次博客
    Spring boot 直接访问templates中html文件
    Spring boot + mybatis + orcale
    Spring boot+ maven + thymeleaf + HTML 实现简单的web项目
    HTML 中点击<a>标签,页面跳转执行过程
    orcale 使用创建日期排序然后分页每次取排序后的固定条数
    JSON语法规则
    Windows idea 搜狗输入法输入中文只显示英文
  • 原文地址:https://www.cnblogs.com/denggelin/p/5573891.html
Copyright © 2020-2023  润新知