1.格式化输入输出
格式化输入
格式化输入scanf:
scanf("i = %d", &i);
printf("i = %d\n", i);
结构体
1.用typedef给结构体取别名
2.结构体不像类,只能放数据
3.数据可能会内存对齐问题(可以省内存)
动态内存分配
内存分配(堆区):
内存释放:
悬空指针问题:
函数指针
double (f) (double)必须加(f),否则按照优先级优先和返回值结合
作用:创建一个函数,然后在别的地方调用---回调函数
文件
内存缺点:断电即失去
分类:文本文件、二进制文件
1.文本文件
缺点:1.不跨平台,可能出现错误(win下\r\n换行,linux \n)或者提前终止(linux中没有eof,如果放到win下可能碰到eof直接终止)
2.占用空间高
二进制文件:
缺点:看不懂
优点:占用小,网络传输等需要高效的场景肯定都是二进制文件读写
缓冲区:
fflush:不需要输出缓冲区,直接输出到文件中
流:
流对象其实就是FILE结构体的对象,有三个指针可以指向头尾和当前读写位置。
文件的打开关闭:
1.fopen:’+‘的模式都可以读也可以写,’b‘的模式代表读写二进制文件
fclose:
文本文件的读写:
1.fgetc/fputc
2.fgets/fputs
序列化:即将内存中的对象持久化(文本格式)xml,json
反序列化:把持久化的对象加载到内存并生成对应的对象
二进制文件的读写:
1.fread:
为什么buf大小设置为4k的整数倍?因为操作系统的页大小为4k
2.fwrite:
文件定位
用前面的函数只能做到顺序读写,文件定位函数可以做到任意读写
错误处理
errno:一个宏,出现错误就把errno设置成对应的错误码(可读性低)
因为errno可读性低,又有strerror(errno)来输出错误信息