1.常量

define PI 3.14 //定义宏常量
const //const修饰的标识符不可改变

2.数据类型

byte short int long long long float double char

3.输入输出

printf //格式化输出
putchar //向屏幕输出一个字符
scanf //格式化输入
getchar //从键盘读取一个字符

4.多分支条件结构

if for while do while switch

5.数组

数组的运算

  1. int main(int argc, char **argv) {
  2. int arr[4][3] ={
  3. {1,2,3},
  4. {21,22,23},
  5. {31,32,32},
  6. {41,42,43},
  7. };
  8. printf("数组的总大小= %u \n",sizeof(arr));
  9. printf("数组的行数= %u \n",sizeof(arr)/sizeof(arr[0]));
  10. printf("数组的列数= %u \n",sizeof(arr[0])/sizeof(arr[0][0]));
  11. printf("数组的个数= %u \n",sizeof(arr)/sizeof(arr[0][0]));
  12. }

6.字符串数组

总结遇到\n才算结束
统计每个字符的出现次数

  1. int main(int argc, char **argv) {
  2. int arr[11]={0};
  3. for(int i = 0; i < 10; i++){
  4. scanf("%c",&arr[i]);
  5. }
  6. printf("--------\n");
  7. int count[26]={0};
  8. //索引-a等于的是下标,每次出现该元素++
  9. for(int i = 0; i < 11 ; i++){
  10. int x =arr[i]-'a';
  11. count[x]++;
  12. }
  13. //打印输出
  14. for(int i = 0; i < 26; i++){
  15. if(count[i] != 0){
  16. printf("字符%c出现了%d次\n",i+'a',count[i]);
  17. }
  18. }
  19. }

7.字符串操作函数

char gets(char s); //参数是一个字符串地址
char fgets(char s,int size,FILE stream);
char s :保存的字符串地址
int size:描述空间的大小
FILE stream:读取字符串的位置
char
puts(char s); //向屏幕输出字符串,失败返回0
int fputs(char
s,FILE stream);
char
s:输出的字符串
FILE*stream:读取字符串的位置

8.多文件连编

总结:抽取代码块到文件,之后创建自定义头文件,然后引入需要的头文件,最后在代码块文件中引入自定义头文件

9.指针

总结:

左值在运算符左边的变量用于存储数据的空间
右值在运算符的右边的变量用于取出数据空间里的值

指针的使用

  1. //随便一个变量
  2. int a = 10;
  3. //指针引用地址
  4. int* p = &a;
  5. //为指针的变量赋值
  6. *p = 2000;
  7. //输出指针的数据
  8. printf("%d\n", *p);

野指针

指向地址不明确的指针叫做野指针

万能指针 泛型指针

  1. //随便一个变量
  2. int a = 10;
  3. //万能指针引用变量a的地址
  4. void* p = &a;
  5. //将指针的类型转换为int* 输出
  6. printf("(void* p) = %d",*(int*)p);

常量指针

总结:const向右修饰,被修饰的值为只读,不可修改

const int p //值不可以修改
int
const p //地址不可以修改
const int* const p //地址与值都不可以修改

多级指针

总结:多级指针存放的是上一级指针的地址,不能跳跃存放

指针与数组

总结:数组就是存放地址的常量,可以直接赋值给指针变量,指针数组的本质是一个二级指针

指针数组的元素访问:

a[i] == (a+i) //a是地址,i是数组偏移量
**p ==
(*p)

二级指针:就相当于二维数组

指针与方法形参

总结:指针/数组作为函数的参数时,sizeof(指针/数组)的值是 指针/数组 的地址,所以传递参数是带上数组的长度

指针与方法返回值

总结:指针作为返回值,return必须返回的是一个地址,因为指针保存的就是地址,C语言不支持数组作为返回值

10.字符串API


查找子串

char strstr(char str,char* substr);

参数说明:返回值接受的是查找出来的所有子串

char str //源串
char
substr //子串


字符串拷贝

char strcpy(char dest , char src ) //字符串拷贝 注意vs2019 会提示不安全的方法建议用 strcpy_s
char
strcpy_s(char dest , rsize_t n , char src) //安全的字符串拷贝
char strncpy(char dest , char* src , size_t n) //拷贝指定长度的字符,不会自动添加”\0”;

参数说明:

char dest //存储目标字符串
char
src //要拷贝的字符串
rsize_t //要拷贝的长度


字符串拼接

char strcat(char dest , char src); //字符串拼接,吧src的内容拼接到dest中
char
strcat(char dest, char src ,size_t i); //拼接多少个字符


int strcmp(char s1, char s2); //比较两个字符串是否相等
int strncmp(char s1 , char s2, size_t i) //

参数说明

int //返回0 相等,-1不相等
s1 //字符串
s2 //字符串
i //比较指定长度


字符串查找

char strchr(char str , char s) //字符串查找
char
strrchr(char str, char s);


字符串拆分

char strtok(char str , char* splitstr); //字符串第一次拆分传串,第二次第一个参数传NULL


字符串转换

int atoi(char str) //字符串转int类型
float atof(char
str) //字符串转浮点型
long atol(char* str) //字符串转长整型


11.内存管理

局部变量

作用域:{}之间

全局变量

作用域:整个程序通用
语法:extern int a=10; //在main上方声明

静态全局变量

作用域:本文件内使用,不允许声明导出其他文件
语法:static int a =10;

静态局部变量

作用域:{}之间
语法:static int a =10;

申请堆内存与释放

void (int)malloc(sizeof(int)4) //申请4个int大小的空间
void
calloc(size_t InitEellement, size_t Max) //会初始化内存
void realloc(void p , size_t Max) //从新分配内存大小,模式:空间够,拼接,空间不够 新创建
void free(void* p) //释放内存空间


12.结构体、联合体、枚举

结构体

语法总结:typedef 别名

  1. struct{
  2. int id;
  3. int source;
  4. };
  5. typedef struct{
  6. int id;
  7. int source;
  8. }student;

联合体

  1. union{
  2. ...
  3. }
  4. typedef union{
  5. ...
  6. }student ;

枚举

语法总结 emun 变量{var1,var2,var3};


13.文件

打开文件

  1. FILE* fopen(const char* filename const char* mode);

参数与返回值
返回值:成功返回文件指针 失败返回NULL
filename:
文件地址
mode:
r //只读,文件不存在报错
w //可写,文件存在清空内容,不存则创建
w+ //可读、可写,文件存在清空内容,不存在则创建
a //追加,文件存在追加方式打开文件

关闭文件

  1. int fclose(FILE* stream );

参数与返回值:

返回值:成功返回0 失败返回-1

文件读取读取

int fgetc(FILE stream) //读取文件流中的一个字符返回 ASCII 码 失败返回 -1
int fputc(char
str,FILE stream) //写入到文件流一个字符返回该字符的ASCLL码,失败返回-1
int feof(FILE
stream) //判断文件是否到达结尾成功返回非零,没有到达结尾返回0
void EOF //该值为-1 表示文件结尾 这种方式有bug 遇到-1 就结束 不推荐

fwrite

  1. int fwrite(const char* ptr,size_t size, size_t num,FILE* stream)

参数与返回值

返回值:永远都是第三个参数
参数1:待写入的数据
参数2:待写入的大小 一般设置为 1
参数3:写入数据的大小
参数4:文件指针 fp

fread

  1. int fread(const char* ptr,size_t size,size_t num,FILE* stream):

参数与返回值

返回值:成功返回 参数3 num, 失败:返回0 文件到末尾返回0
参数1:读取数据保存的位置
参数2:带读取数据的大小 一般设置为1
参数3:读取数据的大小,
参数4:文件指针fp

fseek 随机指针

  1. int fseek(FILE* stream , long offset , int whence);

参数与返回值

返回值:成功 0 失败-1
参数1:文件FILE指针
参数2:偏移量
参数3:SEEK_SET 起始位置 SEEK_CUR 当前位置 SEEK_END 末尾位置

ftell

  1. long ftell(FILE* stream);

参数与返回值

返回值:当前光标所在的位置
参数1:文件FILE指针

rewind 重置指针为文件头

  1. void rewind(FILE* stream)

参数与返回值

返回值:无
参数:文件FILE指针

remove 删除文件

  1. void remove(FILE* stream);

rename 重命名文件

  1. int rename(const char* oldFileName,const char* NewFileName);