C程序设计语言-美-里奇-C语言之父-机械工业出版社

C程序设计语言-美-里奇-C语言之父-机械工业出版社

我的思考

汇编语言中,程序分为多个段,数据段和代码段,我认为所有的语言大抵也是如此。以下这两点,是所有语言的基本。

  • 数据段:数据类型和变量。汇编中的数据段中存放着不同长度的数据,C语言则有数据类型、数组。
  • 代码段:表达式和流程控制。汇编中的代码段中有指令,如add ax, 1等等,C语言中则有表达式。汇编中的流程控制如jmp等则对应C中的if,for等流程控制语句。

其他C语言中的特性:

  • 编译器伪指令%include:C语言中也有#include伪指令(预处理器指令)
  • 符号常量:#define SUCCESS 1
  • 声明和定义分离:因为C语言编译成可执行文件需要多个步骤:预编译、编译、汇编、链接。而只有最后一步才需要查找具体的实现(定义),所以声明和实现分离是比较好的,即分为.h和.c文件
  • 外部变量:extern,跟函数的声明有相同的作用,链接之前不会找他的实现(定义)。

C预处理器

源文件的开始处通常都会有多个#include指令,它们用以包含常见的#define语句和extern声明。或访问库函数声明,如

指针

&符号取地址,*符号取地址对应的值。指向void的指针(void*)可以存放指向任何类型的指针。指针运算pointer++每次都指向下个数据,指针移动的距离是指针指向类型的长度。

指向函数的指针,*优先级低于(),所以void *comp()表示comp函数范围了int指针,而void (comp*)()表示comp是指向函数的指针。

结构体

使用点号.访问结构体中的内容。类似Java中的类。

struct point{
    int x;
    int y;
};

如果一个指针是指向结构体的指针,那么可以使用->来访问属性。

struct point *rp;
rp->x;
rp->y;

类型定义typedef

C语言提供了typedef来定义新类型名,如typedef int Length;则Length和关键字int完全相同。

输入和输出

标准库头文件一般在/usr/include目录下。
启动一个C语言环境时,操作系统负责打开3个文件,它们分别是标准输入、标准输出、标准错误,他们在中声明。如下程序将从标准输入(键盘)读取一个字符

#include<stdio.h>
main(){
    int ch = getc(stdin);
    putc(ch, stdout);
}

读取文件时,读取到末尾时会返回EOF,在中声明,一般为-1

系统调用、POSIX、库函数

系统调用由操作系统提供,是用户程序与操作系统内核交互的桥梁。 POSIX规范是unix-like操作系统需遵循必须实现的接口,一般以库函数的形式提供。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦