位字段

位字段(Bit-field)就是数据成员,然而被指定了可存放的位数量,也就是用来存放位数据的值域,必须是整数或枚举,通常使用 unsigned,例如 unsigned int: #include.........

union

有些结构的实例,可能包含不同类型的成员,然而,在某个时间点上,只会有一个成员是有效的,例如,你可能会设计一个磁头结构,磁头读取磁带中的数据并存储为对应的数据类型: #include <stdio.........

枚举

有时候,你会想要定义一组相关的常数,例如,以一组常数来代表游戏中动作: #include <stdio.h> const int Action_STOP = 0; const int A.........

结构组合

如果今天你想定义一个支票帐户,方式之一是: typedef struct { String id; String name; double balance; .........

结构与指针

在〈定义结构〉中示范的 printAcct 函数,参数直接以结构类型定义,指定结构实例作为实参时,会创建新的实例并复制各个值域。 如果不希望复制的行为发生,可以传递地址,例如: #include &l.........

定义结构

有些数据会有相关性,相关联的数据组织在一起,对于数据本身的可用性或者是代码的可读性,都会有所帮助,例如,在程序中你可能发现,在进行帐户之类的处理时,帐号、名称、余额这三个数据总是一并出现的,这时可以.........

函数指针

程序在执行时,函数在内存中也占有一个空间,将函数名称作为指定来源时,函数名称会自动转为指针,类型由返回值类型与参数列决定,若要将之指定给另一函数指针,类型的定义方式如下: 返回值类型 (*名称)(参.........

不定长度实参

在定义函数时,有时无法事先得知要传递的参数个数,透过数组收集是方式之一,例如: #include <stdio.h> void foo(int len, double* params);.........

递归

递归(Recursion)是在函数中调用自身,调用者会先置入内存栈,被调用者执行完后,再从栈取出被置入的函数继续执行。栈(Stack)是一种「先进后出」的数据结构,就好比将书本置入箱中,最先放.........

变量范围

在 C 中,谈到变量范围(scope)涉及许多层次,可以谈到很复杂,这边先谈谈全局变量(Global variable)、局部变量(Local variable)与区块变量(Block variabl.........

inline 函数

在调用函数时会有额外的资源负担,一些小函数,可以「建议」编译器设为 inline 内联,若建议被采纳,该函数会自动在调用点展现为代码,例如: math.h int power2(int); int .........

实参与返回值

实参传递是传送值给函数上对应的参数,值会复制一份给参数,来源变量与接受的参数各有一个内存地址,互不相干,例如: int main(void) { int x = 10; .............