oynix

于无声处听惊雷,于无色处见繁花

C中的几个关键字

《C Primer Plus》

这几天抽空看了这本书,看名字就知道,讲的是C语言基础,有70多万字,可谓相当之多。不过好在多数内容都还算基础,所以很粗糙的阅读了一遍,常识性的内容就略过去了,比如什么是语句,什么是表达式,什么是注释,调了几个常用的基础点写一写。

1. define

define关键字用来定义宏,基本的格式是

1
2
3
#define NAME VALUE

#define PI 3.1415

NAME是给宏的定义,比如常见的PI,VALUE就是这个定义的值,这个关键字是在预编译阶段处理的,具体的操作就是复制VALUE,然后替换掉NAME,对,就是这么简单的操作,NAME中不可以含有空格,VALUE没有这个限制

2. typedef

typedef可以声明新的类型名称,来代替已有的类型名,但是却不能增加新的类型。多用来定义结构体

1
2
3
4
5
struct node
{
int id;
struct node * next;
};

正常情况,在声明时需要写完整,

1
struct node n1;

使用typedef定义一个新的类型,来代替struct node

1
2
3
typedef struct node Node;

Node n1;

当然,也可以连在一起写

1
2
3
4
5
6
7
typedef struct node
{
int id;
struct node * next;
} Node;

Node n1;

也可以省略掉node,因为这样写就用不到它了

1
2
3
4
5
6
7
typedef struct
{
int id;
struct node * next;
} Node;

Node n1;

可以再加一个类型,形成链表

1
2
3
typedef Node * List;

List links;

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():以二进制写入
------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2022/04/6fd157c2d45f/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道