简介
众所周知,C语言的精髓是指针,汇编的间接寻址,C#的委托都可以看成是指针,包括C++的继承,多态的底层实现,也都是基于指针的,因此我们可以把指针可以看成一种编程思想吧,从汇编到C,再到C++,Java,C#,我们看出计算机编程语言的一条演进的线索-指针,为什么会这样发展呢,大型软件系统,对于指针的使用要求很高,搞不好就会出现指针越界,空指针的错误,有些公司,还明文规定禁止使用指针,因此如果你有一种比较好的方法,让大家方便简单的使用指针,说不定你可以发明一种编程语言。但是有些地方,使用指针,使用一次之后,你就会上瘾,这就是指针之美. 接下来举两个例子来说明。
数据类型转换
一个项目,把通过串口或是网口获取的数据缓冲到一个数组里面,这个数组的第10,11,12,13个字节表示int类型的参数,不使用指针获取参数的方法如下:
nParam = (buf[10]<<24)+(buf[11]<<16)+(buf[12]<<8)+buf[13];
使用指针获取参数:
nParam = *(int* )&buf[10];
没有对比,就没有伤害吧,效率你自己评估吧!
函数指针
函数指针的使用无处不在,泛型编程,消息事件机制,C#的委托,C++的虚函数,都是基于函数指针的。
一个例子:需要在Main函数里面循环调用50函数:
void Main()
{
while(1)
{
fun1();
fun2();
fun3();
.
.
.
fun50();
sleep(10);
}
}
这个看起来很繁琐,函数指针用一个for循环就可以搞定:
void Main()
{
while(1)
{
for(i=0;i<50;i++)
{
(*ArrayFun[i])();
sleep(10);
}
}
}
这个是不是看起来要简单,整洁一点,函数指针在C语言中,可以嵌入到结构体中,实现数据,和对数据的操作封装到一起.