0%

Regular Expression

在上一节中提到了Python可以利用字符串的find和index方法来查找字符串,但是这种方法只能查找固定的字符串,也就是精确查找.而我们在正常使用过程中模糊查找其实更为常见,例如查找所有以a开头,以b结尾的字符串,这就需要利用正则表达式来实现搜索.

正则表达式的基本语法如下:

阅读全文 »

本笔记完全基于David Beazley的Python教程-Practical Python.

Strings

Python与C/C++不同在于他并没有char类型,因此对于Python的字符串而言,他可以用单引号或者双引号来引导字符串.Python的字符串通常只能传入单行,遇到换行符会报错;但可以通过三引号来表示多行字符串,例如:

阅读全文 »

The Unix System Interface

Unix系统提供了一系列的系统调用,这些系统调用其实是操作系统内部的程序,其提供了用户程序调用的接口.我们将会经常借助系统调用来实现一些高效率的操作,或者访问标准库内没有的功能.

阅读全文 »

Gcc/G++ compiler options

所谓程序的重定向,其实这里的程序并不是指C语言的源码程序,而是经过gcc编译器编译后的可执行文件.我们比较常用的gcc编译命令为

1
gcc prog.c -o exec

这里的prog.c表示C语言的源码文件,而-o exec表示将编译后的可执行文件命名为exec.如果我们不去指定-o选项,那么gcc编译器会默认将编译后的可执行文件命名为a.out.

虽然我们只用了一条命令就完成了程序的编译,但实际上编译过程其实是分为四个阶段进行的,即预处理(Preprocessing),编译(Compilation),汇编(Assembly)和链接(Linking).

阅读全文 »

标准输入输出

标准的输入设备一般指键盘,而标准的输出设备一般指屏幕.我们一般使用EOF作为判断输入流结束的标志,而符号常数EOF在头文件中定义,一般而言其值会被设定成-1.在Windows电脑下,我们可以通过Ctrl+Z来输入EOF,而在Linux下,我们可以通过Ctrl+D来输入EOF;特别注意的是Ctrl+Z必须在行首输入,如果使用的是VS,则需要连续输入三次Ctrl+Z才可以发送EOF.

阅读全文 »

我们在前面提到了用空间换时间的字节对齐规则,会发现结构体其实会浪费很多的空间以用来提高程序运行速度.在这一部分,我们将讨论结构体中的节省空间的技巧,也就是所谓的位域和柔性数组.

阅读全文 »

现代计算机的内存空间是以Byte为基本单位划分的.从理论上说,我们可以将任意的数据类型存放在任意的内存空间之上,但实际上,在现代计算机中存在一种叫做字节对齐的机制,以保证数据存放依照一定的规则进行.所以对齐其实和数据在内存中的存放位置有关,如果一个变量的内存地址正好为他的整数倍,则称之为自然对齐.例如在32位系统中,如果一个int类型的地址为0x00000004,则为自然对齐.而我们接下来讨论的字节对齐主要针对自定义类型,例如结构体,联合体等.

阅读全文 »

复杂声明(Chapter 5)

由于C语言设计指针的声明需要嵌套大量的括号且并不能简单的从左到右阅读, 因此给定一个复杂的声明, 我们极难快速分析出其含义. 在此, 我们需要写一个程序用来实现将C语言的复杂声明转换为文本, 同理还有一个将文本转为声明的程序.

阅读全文 »