1.常量
define PI 3.14 //定义宏常量
const //const修饰的标识符不可改变
2.数据类型
byte short int long long long float double char
3.输入输出
printf //格式化输出
putchar //向屏幕输出一个字符
scanf //格式化输入
getchar //从键盘读取一个字符
4.多分支条件结构
5.数组
数组的运算
int main(int argc, char **argv) {
int arr[4][3] ={
{1,2,3},
{21,22,23},
{31,32,32},
{41,42,43},
};
printf("数组的总大小= %u \n",sizeof(arr));
printf("数组的行数= %u \n",sizeof(arr)/sizeof(arr[0]));
printf("数组的列数= %u \n",sizeof(arr[0])/sizeof(arr[0][0]));
printf("数组的个数= %u \n",sizeof(arr)/sizeof(arr[0][0]));
}
6.字符串数组
总结遇到\n才算结束
统计每个字符的出现次数
int main(int argc, char **argv) {
int arr[11]={0};
for(int i = 0; i < 10; i++){
scanf("%c",&arr[i]);
}
printf("--------\n");
int count[26]={0};
//索引-a等于的是下标,每次出现该元素++
for(int i = 0; i < 11 ; i++){
int x =arr[i]-'a';
count[x]++;
}
//打印输出
for(int i = 0; i < 26; i++){
if(count[i] != 0){
printf("字符%c出现了%d次\n",i+'a',count[i]);
}
}
}
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.指针
总结:
左值在运算符左边的变量用于存储数据的空间
右值在运算符的右边的变量用于取出数据空间里的值
指针的使用
//随便一个变量
int a = 10;
//指针引用地址
int* p = &a;
//为指针的变量赋值
*p = 2000;
//输出指针的数据
printf("%d\n", *p);
野指针
指向地址不明确的指针叫做野指针
万能指针 泛型指针
//随便一个变量
int a = 10;
//万能指针引用变量a的地址
void* p = &a;
//将指针的类型转换为int* 输出
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;
静态局部变量
申请堆内存与释放
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 别名
struct{
int id;
int source;
};
typedef struct{
int id;
int source;
}student;
联合体
union{
...
}
typedef union{
...
}student ;
枚举
语法总结 emun 变量{var1,var2,var3};
13.文件
打开文件
FILE* fopen(const char* filename const char* mode);
参数与返回值:
返回值:成功返回文件指针 失败返回NULL
filename:
文件地址
mode:
r //只读,文件不存在报错
w //可写,文件存在清空内容,不存则创建
w+ //可读、可写,文件存在清空内容,不存在则创建
a //追加,文件存在追加方式打开文件
关闭文件
int fclose(FILE* stream );
参数与返回值:
文件读取读取
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
int fwrite(const char* ptr,size_t size, size_t num,FILE* stream)
参数与返回值
返回值:永远都是第三个参数
参数1:待写入的数据
参数2:待写入的大小 一般设置为 1
参数3:写入数据的大小
参数4:文件指针 fp
fread
int fread(const char* ptr,size_t size,size_t num,FILE* stream):
参数与返回值
返回值:成功返回 参数3 num, 失败:返回0 文件到末尾返回0
参数1:读取数据保存的位置
参数2:带读取数据的大小 一般设置为1
参数3:读取数据的大小,
参数4:文件指针fp
fseek 随机指针
int fseek(FILE* stream , long offset , int whence);
参数与返回值
返回值:成功 0 失败-1
参数1:文件FILE指针
参数2:偏移量
参数3:SEEK_SET 起始位置 SEEK_CUR 当前位置 SEEK_END 末尾位置
ftell
long ftell(FILE* stream);
参数与返回值
rewind 重置指针为文件头
void rewind(FILE* stream)
参数与返回值
remove 删除文件
void remove(FILE* stream);
rename 重命名文件
int rename(const char* oldFileName,const char* NewFileName);