指针之美

来源:互联网 发布:arp 添加网关mac 编辑:程序博客网 时间:2024/06/05 17:02

简介

众所周知,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语言中,可以嵌入到结构体中,实现数据,和对数据的操作封装到一起.

1 0