高级指针话题

高级指针话题

高级声明

clip_image002返回值类型是一个指向整型的指针;

clip_image004f是一个函数指针,它做指向的函数返回一个整型值;

clip_image006f是一个函数指针,只是所指向的函数的返回值是一个整型指针,必须对其进行间接访问操作才能得到一个整型值;

clip_image008clip_image009函数只能返回标量值,不能返回数组;

clip_image010clip_image009[1]数组元素必须具有相同的长度,但不同的函数显然可能具有不同的长度;

clip_image012括号内的表达式*f[]首先进行求值,所以f是一个元素为某种类型的指针的数组。表达式末尾的()是函数调用操作符,所以f肯定是一个数组,数组元素的类型是函数指针,它所指向的函数的返回值是一个整型值。

 

对于复杂的函数定义,可以参考http://cdecl.org

clip_image014

函数指针

       函数指针的两个用途:

l  转换表jump table

l  作为参数传递给另一个函数

 

in ans;

ans = f(25);

执行流程为:函数名f首先被转换为一个函数指针,该指针指定函数在内存中的位置,然后,函数调用操作符调用该函数,执行开始于这个地址的代码。

在我们需要函数能作用与任何类型的值是,可以把参数类型声明为void *,表示一个指向未知类型的指针

转移表

对于转换表的例子为:对于一个计算器,在只是实现了加、减、乘、除时,可以使用switch语句来实现,但是如果具有成千上万个操作符,我们可以通过右边的转换表来实现。

clip_image016clip_image018

字符串常量

对于字符串“xyz”

l  “xyz”+1 是字符y的地址,因为“xyz”代表的是一个指针,即x的地址;

l  *“xyz” 代表的是x

l  “xyz”[2] 代表的是字符z

 

我们需要把十进制value转为十六进制的,可以采用:

clip_image020很帅clip_image021的方法。