C和指针 阅读笔记(11-15章)
malloc和free维护一块内存池(堆)
malloc申请内存返回一块连续内存的指针,如果申请失败,则返回NULL指针。在对申请到的空间使用前要先判断非NULL指针。
calloc申请内存:入参需要 所需元素个数和每个元素的字节数,而且返回内存前会先把内存初始化为0。
free释放内存:入参是申请时返回的内存指针。
这种手动申请动态内存的好处是:在运行时才分配内存。(堆栈上的则是在编译时就被分配)
内存泄漏:动态内存申请后,不再使用时未被释放。这块内存会一直占用,直到内存耗尽不得不重启。
字符串常量出现在表达式中时,它表示1个指针常量,指向第一个字符,因此 “xyz”+ 1 的结果是 y
命令行参数:argc和argv
argc:整数,参数的数量
argv:字符指针数组,内部每个指针指向一个命令行参数,以一个NULL指针作为结束标志。
条件编译:(如果最终调式完毕,输出最终库,define DEBUG 0)
#define DEBUG 1
#if DEBUG
printf(" 启动DEBUG编译")
#endif
#progma 不可移植
流stream: I/O操作中移进移出的字节
读取和写入:从一块称为缓冲区buffer的内存区域来回复制数据;用于输出流的缓冲区只有当被写满时才会被刷新flush(写入)到设备或文件中。
输入缓冲区为空时从设备或文件读取下一块较大输入,填充缓冲区。
流分两种:文本流text r w
二进制流binary rb wb
fopen函数:打开一个特定的文件,并把流和这个文件关联。
函数执行成功,返回一个结构指针,指向这个新创建的流;执行失败,返回一个NULL指针。
关闭流:fclose ( 创建时的流指针)
函数从流中读取字符:读到末尾,返回EOF常量,代表不再有字符了。