二级C学习笔记

C语言

基础知识

  • C程序由源文件编译生成目标文件

  • 结构化程序的三种基本结构

    循环结构、选择结构、顺序结构

  • 标识符

    关键字、预定义标识符、用户标识符

    预定义标识符:系统类库名、系统常量名、系统函数名

  • 整型常量

    十进制:0~9

    八进制:0开头,0~7,如024

    十六进制:0x开头,0~15,如0x24

  • 实型常量

    十进制小数:小数点两边必须有数字(至少一边有数)

    指数:e前必须有数字,e后必须为整数

  • 字符常量

    字符常量可以参与任何整数运算

    转移字符是特殊的字符常量

    \ddd:八进制数代表的一个ASCII码

    \xdd:十六进制代表的一个ASCII码

  • 符号常量

    #define N 20的N

    不需要设定常量的类型

    在主函数其值不能再被定义

  • 字符串常量

    字符串自带'\0',这是与字符不同的地方。所以申请内存也要多申请一个

    不能用字符串常量对字符数组名进行整体赋值

    赋值要用strcpy(),注意空间大小是否够

    可以直接对字符指针赋值,改变字符指针存放的地址

    字符指针也可以用strcpy(),不过要开辟空间

运算符

  • sizeof

    sizeof(double)是一个整型表达式,其返回一个无符号整数

  • ,

    逗号运算符从左到右计算,且先赋值

    c = (a += ++b, b += 4);括起来后c的值为最后(最右)表达式的值

  • %

    运算对象必须为整数

  • =

    赋值运算符左边必须是一个变量

  • 位运算

    对象只能是整型或字符型数据,不能是实型数据

    -1的补码是ff,所以~0就是-1

基本语句

  • 如果要输出"%",则应该用"%%"表示

  • 复合语句也被称为语句块,它可以由任意条语句构成,也可以一条没有

  • printf

    格式%md,超过m位按实际位数输出

    格式%1.3f,小数只输出3位,四舍五入

  • scanf

    输入格式中不能出现其它非法字符,如%d,%d,中间不能出现多余的空格

选择结构

  • 关系运算符

    当运算两边的类型不一致时,系统将自动转化

    &&和 | | 逻辑表达式都有短路现象

  • else

    else不是一条独立的语句,它只是if语句的一部分

    else与最近的if 配对,所以if 最好都带上{ },保证配对不错

循环结构

  • while

    先执行条件判断,即使循环结束,条件处的表达式也要执行完。如a++

    a++在条件里,判断a,条件语句结束后再加1

数组

  • 初始化

    当所赋初值个数少于所定义数组的元素个数时,将自动给后面的其它元素补初值0

  • 访问

    a++即使加了括号,也是访问a位置,语句结束了再加1

  • 数组名

    数组名一般存放的是首地址,一般返回元素类型指针

    当运算符为sizeof或者&时,返回数组类型指针

  • 字符数组

    初值个数小于数组长度,剩余的元素定为空字符'\0'

    不能对字符数组名直接赋值,要用strcpy()

    数组注意空间大小,多留一个'\0'的空间

  • 字符串数组

    数组中每个元素都是一个存放字符串的一维数组

    二维数组的意思

函数

  • 返回

    在函数中允许有多个return语句,但每次调用只能有一个return语句被执行

    返回类型以函数值的类型为准,进行自动转换

    当函数没有指明返回值,或没有返回语句时,函数返回一个不确定的值

  • 参数

    形参是局部变量,开辟出来放入栈中

    形参变量存放实参的值或地址,在函数可改变存放其它的

  • 函数说明

    说明有两种方式:外部说明、内部说明

    在函数内部所作的声明称为内部说明,也成为局部说明

    在函数外的声明叫外部声明,在程序最前端,又称为全局说明

  • 函数名

    函数名代表该函数的入口地址

  • 变量

    外部变量和局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”

    变量名在不同函数有相同,自己作用范围的变量优先

    没有指定存储类别,或使用auto说明符,默认自动类别

    register也是自动类变量,变量的值保留在CPU的寄存器

    局部变量不初始化,默认随机值

    静态局部变量在内存的静态存储区,只被初始化一次,直到程序结束,默认为0

    静态全局变量不会跨文件

    全局变量可以跨文件,其它文件要用extern 才可以使用该全局变量

指针

  • 多维数组

    多维数组的元素是数组,多维数组当成一维数组来处理

  • 结构体指针

    结构体名也是存放首地址

    如果第一个元素为指针且动态分配的,则被赋值的变量第一个元素也指向该堆。其它元素仍在堆(函数内定义的)

  • 字符指针

    存放字符串的首地址

    既可以初始化也可以赋值(改变存储内容)

    数组名可以初始化,而不可以赋值,它是一个固定的值

  • 函数指针

    数据类型 (*指针变量名)();

    只需将(*s)代替函数名即可

    函数指针的运算没有意义,如++s、–s

宏定义

  • 不带参数

    #define 宏名 替换文本

    可以用#undef命令终止宏定义的作用域

结构体

  • typedef

    typedef 类型名 新名字

    原有的类型名依然有效

  • 结构体

    定义结构体时编译程序不会分配内存空间

    ANSI C标准规定结构体至多允许嵌套15层

    直接定义结构体

    struct { 成员表列 } 变量名表列

    即不出现结构体名

文件

  • 概念

    文件分为ASCII文件和二进制文件

    文件指针 FILE *fp

  • fopen

    fopen(文件名,文件使用方式)

    返回一个FILE类型的指针

  • fread、fwrite

    fread(buffer, size, count, fp);

    fwrite(buffer, size, count, fp);

    buffer代表的是一个指针变量

  • fscanf、fprintf

    fscanf(文件指针,格式字符串,输入列表)

    fprintf(文件指针,格式字符串,输入列表)

    读写对象是磁盘文件上的数据

  • rewind

    rewind(fp);

    使文件的位置指针重新返回到文件的开头

  • fseek

    fseek(fp, offset, method)

    method = 0 从头开始 1 当前位置 2文件结尾

猜你喜欢

转载自blog.csdn.net/qq_40860934/article/details/104486359