指针
-----
一个指针变量存储另一个对象或函数的地址。
星号*的意义是指向。printf提供了输出指针的格式符%p。
一个指针,无论它指向的对象是何种类型,它占用的内存都是一样的。在32位的电脑上,指针长度通常是4个字节。
void*被用作通用指针类型。
类型限定符const, volatile, restrict如果出现在*和指针名之间,则是修饰指针本身,否则就是修饰它所指向的对象。
volatile告诉编译器,一个对象可能被另一个进程或事件所改变。因此每次访问都应该避免用缓存的值。
如果要把一个指针转换为一个含有更少类型限定符的指针,你必须使用显示转换。相反的转换编译器会隐式完成。
restrict 只能修饰指针。用法实例:
int * restrict p = (int *)malloc(sizeof(int));
p指向一个int型的对象,该对象只能通过指针p访问,p就是一个restrict型的指针。
restrict只是给编译器可以利用某些优化技术的一个提示。
数组指针与指针数组
要定义数组指针必须使用圆括号,int (*p)[10] -- p is a pointer to an array of tenelements with type int
没有圆括号p就是一个指针数组,int *p[10] -- p is an array of ten pointers to int
枚举类型
----------
枚举类型中不同的常量可以有相同的值。
enum { OFF, ON, STOP = 0, GO = 1, CLOSED = 0, OPEN = 1 };
定义枚举类型时,标签值不是必须的,如果仅仅只是想要声明一些
常量而不需要定义该类型的变量。上面这样的定义好过用一长串的
#define 预处理命令。
一个以前导0开始的数字被解释为8禁止常量。十六进制常量前缀为0x或0X。