一、使用指针好处
(1)能够为调用函数灵活的修改实参变量的值
(2)支持动态内存分配,能够方便的实现动态的数据结构(如二叉树和链表)
(3)可以提高某些程序的效率
(4)实现缓冲方式的文件存取
二、指针是地址
(1)技术上,任何类型的指针都可以指向内存的任何位置,但是指针的操作都是基于类型的
(2)指针的操作是基于指针的基类型而执行的,尽管在技术上指针可以指向对象的其他类型,但指针始终认为它是指向基类型的对象,指针操作受指针类型而不是它所指向的对象类型的支配。
三、指针表达式
1、涉及指针的表达式符合其他c表达式的规则
(1)printf("%p",···);
(2)指针转换
void*型,用来说明基类型未知的指针,它允许函数指定参数,此参数可以接受任何类型指针变量而不必报告类型失配
当内存寓意不清时,也常用于指原始内存
2、指针算术:只可以进行加法和减法操作
(1)指针与整数的加、减法,求指针偏移后的地址
(2)从一个指针减去另一个指针,求出指针偏移量
3、指针比较
主要用于两个或多个指针指向共同对象的情况
四、初始化指针
1、非静态局部指针已声明但未赋值前,其值不确定
2、全局和静态局部指针自动初始化为NULL
3、赋值前使用指针,不仅可能导致瘫痪,还有可能使os奔溃
4、习惯用法:对于当前没有指向合法的内存空间的指针,为其赋值NULL
五、函数指针
void process (char *a,char *b,int(* apple)(const char*,const char*));
其中,int(* apple)(const char*,const char*)就是一个函数指针,传入的是这个函数指针的首地址
在工作中常需要向过程传入任意函数,有时需要使用函数指针构成的数组,如在接受程序运行时,常需要根据语句调用各种函数。此时,用函数指针构成的数组取代大型switch语句是非常方便的,由数组下表实施调用。