C语言总结

今日踽踽独行,他日化蝶飞去。

思维导图


  1. C语言作为一种编译型语言,写出的源文件(.c)需要经过GNC的编译器编译成可执行文件(.exe)之后才可以执行,它的优点在于速度快,可以直接操作内存。
  2. 在每一个c语言程序的头部,都需要有一个#include来引入头文件,原因在于学习后面的函数知识我们可以知道,为了扩大函数的作用域,在其他文件中引用函数,需要用extern来声明函数。头文件就是一些有关函数声明的(只有函数名,形参类型)的文件,include之后便可以在源文件中使用这些C语言自带的函数啦。
    • 如果用<>符号说明在系统中寻找标准库的头文件
    • 如果用" "则说明在用户自己的文件夹下寻找头文件
    • #符号表示的内容由预处理器进行编译,成为(marco)
    • stdio是一些C自带的I/O函数
    • 还有一些特殊的库也常用,如math,stdlib,string

  1. C语言主要有整数型,实型,字符型三种数据类型,当然后面还会学到指针
    • 应该注意一些I/O函数的数据类型,特别是printf
    • 在C语言中,由系统自动开辟和释放的空间称为(stack)----局部变量,在函数运行结束后会自动释放。超过编译器的最大栈空间就会导致栈溢出(StackOverflow),常因为递归导致
    • 用用户手动开辟和释放的存储空间称为(heap)----全局变量,函数运行结束后不会释放空间,在程序执行结束之后才会释放,这会导致严重的内存泄漏

  1. 与python不同的是,C语言的变量在赋值之前要先声明。其本质上是因为C语言需要为新的变量开辟相应的内存空间,不同的数据类型,需要的存储空间不同,所以要先声明。
    • 自减/自增算法,x和x的区别是前者先自增,再返回;后者先返回,后自增
    • 用#define定义常量,全局变量,或者将指定字符替换成其他字符
    • 变量声明前可加const来表明这个变量只读
    • static

  1. C语言支持声明一串连续的变量空间,用来存储一系列存储大小一致的变量和数据
    • 数组的定义“左闭右开”,即数组的第一个元素的下标是0,最后的应该元素的下标是n-1
    • 多维数组的存储时先列后行依次排序
    • 数组的许多功能要在函数和指针中才能体现
    • 定义数组时,数组的【】大小要用常量/常量表达式来定义,因为这个涉及到了动态内存空间的开辟

  1. C语言程序的执行顺序是从上往下执行,遇到return,goto语句则会打破执行顺序,所以慎用
    • 循环有while循环和for循环两种,while循环要注意()内条件不能是永真式,do { }while则是先执行一次再判断
    • for循环()内分别是赋初值,判条件,执行语,要注意C99中才能在赋初值处声明变量,较早的编译器版本则不行
    • 判断结构 if()注意括号内的式子要是逻辑表达式,最终返回值是0 or 1,即“=”换成“==”
    • 在使用for循环的时候应注意,切忌不要在循环体内更改循环变量,否则可能会导致程序无法跳出循环的严重后果。最好再声明一个变量拷贝再操作。

  1. C语言函数是什么?这个很难下一个定论
    • C语言函数()形参的赋值采用值传递的方式,即计算机会额外开辟新的变量空间来保存数据并操作
    • 函数定义的时候也有类型,用于描述返回值的类型,(务必一致)如果是void类型则没有返回值。
    • 函数定义和调用之前要声明,声明的时候()不一定要写上形参名,数据类型即可。
    • 在头文件里主要包括了一些常用函数的声明,所以每个c程序引用头文件其实是为了扩大函数的作用域,从而可以在该文件中使用其他文件定义的函数。


本文章使用limfx的vscode插件快速发布