C语言
#includeint main(){ printf("Hello World!\n");return 0;}
数据
数据类型
构造类型
数组
- 一维数组
- 多维数组
结构体
- struct
- 结构体嵌套
- 匿名结构体
共用体
- union
基本类型
字符类型
单字符类型
- 声明:char c ='c';
字符串类型
- 声明:char str[] = "字符串";
基本操作
- strlen得到长度
- strcpy字符串赋值
- strcat字符串连接
- sprintf格式化数据写入第一个参数
数值类型
整型
有符
- int
- short
- long
无符
- unsigned
实型
- float
- double
指针类型
一级指针
- 基本类型指针
- 数组指针
- 函数指针
多级指针
- 指向指针的指针
指针使用
- =地址赋值
- &取地址
- *取值
- 可以做+、- 运算
空类型(void)
内存分区
变量
自动变量
auto变量
- 默认定义的变量为auto变量
- 作用域和生存期都在代码块内{ }
- 屏蔽外层变量{ }
- 不能重复定义
- 初始值随机
register变量
- 只能为局部变量
- 数目有限不能定义多个
动态变量
内存申请
- malloc
- calloc
内存释放
- free
参见问题
- 内存泄漏
- 释放以释放的内存
静态(全局)变量
extern变量
- main函数外声明默认为全局变量
static变量
静态局部变量
- 生存期为整个程序,但其他函数不能使用
静态全局变量
- 生存期为整个程序,其他函数也能使用
常量
符号常量
#define
- 定义数字
定义语句
- typedef类型取别名
const
类型右边修饰
- 禁止改写变量
类型左边修饰
禁止改写间接引用
- 针对指针
enum
- enum color{ red=1,blue=2,green=3,pink=4 };
直接常量
整形常量
十进制
- 直接书写
八进制
- 以0开头
十六进制
- 以0x开头
实形常量
十进制数形式
- 0.123、1.02...
指数形式
- 123e4(e和E均可) ==> 123*10^4
字符常量
ASCII字符
单引号(')括起来的字符
- ‘A’、'a'、'?'...
转义字符
不可打印字符,以()开头
- \n、\v、\t0、\b、\t、\r、\、'
程序代码区
函数体二进制码
声明
内部函数static
- 不能被其他文件调用
外部函数extern(可省)
- 可以被其他文件调用
- 不能被其他文件调用
可以被其他文件调用
函数栈帧
符号
基本运算符
算数运算符
- 基本运算符:+ - * / %
- 自增自减运算符:++ --
关系运算符
-
< == >= <= !=
-
逻辑运算符
- 与(&&) 或(||) 非(!)
位运算符
位逻辑运算符
- 与( & ) 位或( ^ ) 或( | ) 取反( ~ )
移位运算符
- 左移(<<) 右移(>>)
其他运算符
赋值运算符
复合表达式
- +=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
赋值运算
- =
条件运算符
- ? :
逗号运算符
- ,
指针运算符
-
- &
-
字节运算符
- sizeof
强制转换运算符
- (类型)
成员运算符
- . ->
下标运算符
- [ ]
语句
基本语句
表达式语句
赋值语句
- A=1;
- A=B=C=D=1;
运算表达式语句
函数语句
函数调用语句
直接调用
函数名(参数列表);
递归调用
- 递归递进
- 终止条件
函数语句
- 库函数
自定义函数
返回类型 函数名(参数列表){ 函数体;}
参数
形参
定义时函数列表的参数,“剧本角色”
实参
函数调用时传递进来的,"演员"
返回值
- 函数调用完得到的值
参数传递
函数中的参数都是生成的副本,传递地址可以通过取值来找到变量
- 传值
传址
- 数组元素
- 指针
空语句
只有一个“;”的语句
- ;
复合语句
- { 表达式1;表达式2;... }
流程控制语句
条件语句
if语句
if(条件){}else if(条件){}else{}
- if
- if else
- else
switch语句
switch(变量){ case 条件1:表达式;break; case 条件2:表达式;break; ... default::表达式;break;}
- switch
- case
- defaut
三元表达式
- 条件?A:B;
循环语句
while循环
while(条件){ 循环内容}
do...while循环
do{ 循环内容}while(条件);
for循环
for(int i=0;条件;i++){ 循环条件}
转向控制
- break跳出循环
- continue重来一次
- goto跳转
标准输入输出
文件
打开和关闭
fopen(文件名,打开方式)
打开方式
读或写
r
- 文件必须存在
w
- 存在则被覆盖
a
- 追加,创建
可读可写
r+
- 文件必须存在
w+
- 存在则被覆盖
a+
- 追加,创建
读或写二进制
- rb
- wb
- ab
返回值
- 正确:返回文件指针
- 错误:返回NULL
fclose(文件指针)
读
字符
- int fgetc(FILE *pf)
字符串
- char * fgets(char * str,int n,FILE * pf)
格式化
int fscanf(FILE * pf,"格式控制字符串",输出列表)
- 标准输入stdin
- 标准输出stdout
- 标准错误输出stderr
块读
size_t fread(void p,size_t size,size_t num,FILE pf)
- p:地址
- size*num 块大小
写
字符
- int fputc(int c,FILE *pf)
字符串
- int fputs(const char * str,FILE *pf)
格式化
int fprintf(FILE * pf,"格式控制字符串",输出列表)
- 标准输入stdin
- 标准输出stdout
- 标准错误输出stderr
块写
size_t fwrite(void p,size_t size,size_t num,FILE pf)
- p:地址
- size*num 块大小
定位
移动到开头
- rewind(FILE* fp)
当前位置
- long ftell(FILE * fp)
是否到尾部
int feof(FILE *fp)
- 返回0到达尾部
移动指针
int fseek(FILE *fp,long offset,int startPos)
- 文件开始:seek_set
- 文件末尾:seek_end
- 当前位置:seek_cur
屏幕、键盘
输出
printf("格式控制字符串",输出列表);
格式控制字符串
- %[标志][输出最小宽度][.精度][长度]转换说明符
转换说明符
数字
整型
十进制
- %d
八进制
- %o
十六进制
- %x
无符十进制
- %u
实型
小数
- %f
指数
- %e
字符
字符
- %c
字符串
- %s
格式控制符
基本输出
- %s
最小宽度
- %-ms
左边对齐
- %-ms
截取一段
- %m.ns
数字特殊
- %ld
putchar(字符)
- 输出单个字符
puts(字符串)
- 输出字符串
输入
scanf("格式控制字符串",地址列表)
转换说明符(和printf类似)
- %d
- %o
- %x
- %c
- %s
- %f
- %e
格式控制符
接收长整形,包括浮点
- %ld
接收短整型
- %hd
输入宽度
- %10d
忽略输入项
全部忽略
- %*d
指定忽略
- %*6d
char ch = getchar()
- 单字符输入
gets(首地址)
- 字符串输入
char ch = getche
单字符输入不用加回车 getch同
- 非标准库
进程
- exit(0)退出程序
预处理
宏定义
#define
- #define 宏名(参数表) 宏体
- #define 宏名 宏体
#undef
文件
#include
- 标准输入输出库 <stdio.h>
- 字符串库 <string.h>
- 控制台输入输出<conio.h>
- 标准库头文件<stdlib.h>
- 数学库 <math.h>
条件
- #if
- #elif
- #else
- #endif
- #ifdef
- #ifndef