《C Primer Plus》
这几天抽空看了这本书,看名字就知道,讲的是C语言基础,有70多万字,可谓相当之多。不过好在多数内容都还算基础,所以很粗糙的阅读了一遍,常识性的内容就略过去了,比如什么是语句,什么是表达式,什么是注释,调了几个常用的基础点写一写。
1. define
define关键字用来定义宏,基本的格式是
1 |
NAME是给宏的定义,比如常见的PI,VALUE就是这个定义的值,这个关键字是在预编译阶段处理的,具体的操作就是复制VALUE,然后替换掉NAME,对,就是这么简单的操作,NAME中不可以含有空格,VALUE没有这个限制
2. typedef
typedef可以声明新的类型名称,来代替已有的类型名,但是却不能增加新的类型。多用来定义结构体
1 | struct node |
正常情况,在声明时需要写完整,
1 | struct node n1; |
使用typedef定义一个新的类型,来代替struct node
1 | typedef struct node Node; |
当然,也可以连在一起写
1 | typedef struct node |
也可以省略掉node,因为这样写就用不到它了
1 | typedef struct |
可以再加一个类型,形成链表
1 | typedef Node * List; |
Node和List并不是新的类型,它只是替代了struct node和Node类型的指针。
3. 函数指针
1 | void f(char*); |
f是一个函数,输入参数为字符指针,输出为空
1 | void *f(char*); |
f还是一个函数,输入参数为字符指针,输出为void指针,在C里,void指针被当作字符指针来处理
1 | void (*f)(char*); |
这时,f是一个函数指针,输入参数为字符指针,输出为空。
要声明一个指向特定类型函数的指针,可以先声明一个该类型的函数,然后把函数名替换成(*pf)
形式的表达式。然后,pf就成为指向该类型函数的指针。
4. 文件操作
总结几个和文件操作相关的函数,包含在stdio.h
- fopen():打开一个文件,支持多种模式,如文本模式,字节模式b,追加模式a,读取模式r,写入模式w等
- getc():get char,读取字符
- putc():写入字符
- fclose():关闭打开的文件
- fgets():同上面的,获取多个
- fputs():同理
- rewind():返回到文件开始处
- fseek():三个参数,FILE,long,int mode,从哪个位置开始移动多少个字节,正前负后
- ftell():报告FILE现在的位置
- fgetpos():上面的升级版,如果长度超出long了,就用这个
- fsetpos():同理
- fflush():FILE带有缓冲区,将缓冲区的内容刷新到文件
- feof():不为0则表示到末尾了,end of file
- ferror():不为0则表示出错了
- ungetc():把字符串放回去,假装一切都没有发生过
- setvbuf():设置缓冲区的
- fread():以二进制读取
- fwrite():以二进制写入