《C和指针》学习笔记(三)第十一章~第十五章

1、对每个从malloc返回的指针进行检查是否为NULL是很有必要的
2、使用realloc后就不能使用原来的指向旧内存的指针
3、传递给free的指针必须是从malloc\realloc\calloc返回的指针
4、不能释放一部分的内存,不要访问被free掉的内存
5、strdup()函数是c语言中常用的一种字符串拷贝库函数  extern char *strdup(char *s);
    strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。
5、只有当确实需要的时候再使用多层间接访问,否则程序会变大庞大、缓慢、难于维护
6、函数指针在使用前必须初始化指向某个函数         =&f   (&符号是可以不写的)
7、函数指针可以用在回调函数以及转换表
8、要注意转换表的越界下标引用
9、mian函数有俩个形参:argc表示命令行参数的数目,argv指向一组参数值
    第一个参数值就是程序名
10、“xyz”+1      *"xyz"     "xyz"[2]
11、把二进制转换为字符 putchar("0123456789ABCDEF"[value%16])
12、define定义中的stuff如果很长,末尾加反斜杠可以换行
13、#define DEBUG_PRINT  printf("File %s line %d:"__FILE__,__LINE__)
    调试语句打印编译的源文件名和行号
14、##把位于它俩边的符号链接成一个符号
15、宏的多次调用可能会带来副作用,尤其是宏中有单次执行会改变状态的函数和操作时,如:++,--,getchar()
16、#undef 移除一个宏定义
17、#if #elif #else   用于条件编译
18、<>函数库文件包含    “”本地文件包含
19、#error指令允许你生成错误信息
20、#progma允许编译器提供不标准的处理过程,比如向一个函数插入内联的汇编代码
21、在定义宏的时候不要在末尾加分号,这样会在使用时更加舒服
22、perror()用于报告错误,参数是一个不是NULL的非空的字符串,打印格式:字符串: 错误
    我们不能用errno判断是否有错误发生,只有调用的函数有错误时errno的值才有意义
23、exit()终止一个程序的执行,EXIT_SUCCESS和EXIT_FAILURE 提示程序终止是成功还是失败
24、fflush(stdout) 在调试用的printf后加一句 迫使一个输出流的缓冲区内的数据进行物理写入
25、流分为俩种类型,文本(text)和二进制(binary)流流分为俩种类型,文本(text)和二进制(binary)流
26、数据结构FILE用于访问一个流
27、三个标准流:stdin,stdout,stderr
28、对于输出流,fclose函数在文件关闭时刷新缓冲区,如果成功返回零值,否则返回EOF
29、fgetc、getc、getchar函数的返回值为int型的原因:为了允许函数报告文件的末尾,如果函数的返回值为char那么,256个字符中必定有一个字符被EOF代替,用int作为返回值可以使得所有的字符都能被读取
30、fgetc和fputc是真正的函数,但getc\putc\getchar\putchar都是通过#define指令定义的宏  它们的速率差别微乎其微
31、ungetc把先前读入的字符返回到流中,这样它可以在以后被重新读入
32、未格式化的IO简单读取或写入字符串
    格式化的IO则执行数字和其他变量的内部和外部表示形式之间的转换
33、scanf格式代码:(1)一个可选的星号(2)一个可选的宽度(3)一个可选的限定符(4)格式代码
34、星号将使转换后的值被丢弃而不是进行存储
35、printf格式代码:(1)零或多个标志字符(2)一个可选的最小字段快读(3)一个可选的精度(4)一个可选的修改符(5)转换类型
36、把数据写到文件效率最高的方法是用二进制形式写入,只有当数据被另一个程序按顺序读取时才有用
37、ftell函数返回流的当前位置
38、fseek函数允许在流中定位
39、rewind函数将读写指针设置会指定流的起始位置
40、fgetpos函数在一个fpos_t类型变量的位置存储文件的当前位置
41、fsetpos函数把文件位置设置为一个fpos_t类型变量的值
42、setvbuf函数将一个数组设置为流的缓冲区,注意缓冲区长度最好为BUFSIZ
43、FILE *tmpfile(void) 用于创建一个临时文件

你可能感兴趣的:(C语言,指针,编程,C/C,c)