1, 后缀 ++ 和 -- 比 * 的优先级高, 所以 * P++ 与 *(P++) 等价. 它自增 P 并返回 P 自增前所指向的变量数值.
前缀 ++ 和 -- 与 * 的优先级相同, 但是按从右向左结合. 所以 ++*P 与 (*P)++ 等价.
2, 对于 char *p;
- int a[10];
- P = a;
不可以使用 ((int *)P)++. 因为 (int *)p 只可以作右值. 要达到目的可以用 P = (char *)((int *)P + 1);
所以要注意, 类型转换只可以做右值.
3, 用指针调用函数的形式.
- int func(){}
- int (*fp)() = func;
既可以使用 * fp(), 也可以使用 fp() 调用函数 func();
C 语言细节之空指针
1, 空指针表示 "未分配" 或者 "尚未指向任何地方". 它与未初始化的指针不同, 未初始化的指针可能指向任何地方. 每种指针类型都要一个空指针, 而不同类型的空指针的内部可能不尽相同.
2, 一般给指针赋值 0 就是将指针设为空指针 (等同设为 NULL). 但是 0 作为函数参数, 传给指针时需要对 0 作类型转换.
3, 可以使用 if(p) 等同于 if(p != 0), 但是这种风格不好.
4,NULL 实际上是一个定义在 stdio.h 中定义的宏, 代表空指针常数, 赋给指针, 等同于 0. 欲处理器把所有 NULL 都转换为 0
总结: 两条规则:
(1) 当需要使用空指针常数, 使用 0 或者 NULL
(2) 当在函数调用中使用 0 或者 NULL 用作参数, 把它转换成被调
函数需要的指针类型.
来源: http://www.jianshu.com/p/6aae1a7aecdf