第13章,高级指针话题

2017-01-08  本文已影响0人  Dafanzi

进一步探讨指向指针的指针

指针的指针使用过多会使程序变得庞大,变得难以维护。但指针的指针在如链表的插入操作中,又是必须的;

综上所述在不需要使用指针的指针的地方就尽量不要使用。

高级声明

int f;           int  *f;       int *f,g;

int f();         int *f();/*()的优先级大于* ,所以这里指函数f的返回值为int *  */          int (*f)(); /*f是一个函数指针,其返回值为int */

int  f[];   int *f[]  /*下标的优先级更高,所以f是一个数组,数组元素为int  * */

int (*f[])();f首先是一个数组,数组元素是一个指针,这个指针是函数指针类型

函数指针

回调函数

最常用的应用场景,当你需要在一个链表里查找某个值时,如果是数字字符是否相等用==就好了,如果是字符串的话就需要使用另外的比较方式。所以为了完成查找这个值得在函数中考虑不同的值类型。一种较好的方法是,我们在链表中查找某个值的函数定义的参数中声明一个函数指针(不同的值就传不同的比较函数)。然后值的参数类型用void *,因为值有很多中,这样不同的值类型都可以用这同一个链表差值的函数,只是给它传递不同比较函数即可。

转移表

类似这样的场景可以用转移表。当考虑多种情况,分情况选择不同的处理。最常采用的方法是使用switch结构,但如果情况多了的话,switch会显得异常臃肿。我们可以采用转移表的方法来解决这个问题,不同的处理我们用不同的函数,然后声明一个函数指针,不同的情况对应不同的下标,然后分别调用相应的处理函数即可。

命令行参数

字符串常量

下面两个小例子用到了这个知识

上一篇 下一篇

猜你喜欢

热点阅读