指针,数组,函数,三者的恩恩怨怨

来源:互联网 发布:网狐精华版 源码 编辑:程序博客网 时间:2024/05/21 08:39

一:指针数组

“指针数组”首先是一个数组,存储的是指针。例如:

int  *p[10];

        对于这条语句,我们知道下标引用的优先级高于间接访问,所以他首先执行下标引用。因此,p是一个某种类型的数组,这个数组有10个元素。在取得数组的一个元素后随即进行间接访问操作,我们得到一个整型值。所以,p是一个数组,他的元素类型是指向整形的指针。


二:数组指针

 “数组指针”首先是一个指针,指向的是数组。例如:

int  (*p)[10];

   对于这条语;因为括号的存在,所以间接访问的优先级高,所以它是一个指针。接下来是下标引用,所以p指向整型数组。


三:函数指针

  函数指针是指向函数的指针,他指向函数。有了指向函数的指针变量后,可以用该指针变量调用函数。

int fun (int x); //声明一个函数;

int (*f)(int x);//声明函数指针;

f = fun;//将函数fun首地址赋值给函数指针;

或者:f = &fun;//把函数地址赋值给函数指针。

例子:下面三个表达式代表什么意思?

A ):char * (*fun1)(char * p1,char * p2)

B )  :char * *fun2(char * p1,char * p2);

C )  :char * fun3(char * p1,char * p2):

c):fun3是函数名,p1,p2是类型为char *的参数,函数的返回值类型是char *

B):与c相比,不同的是函数的返回值类型是char * *

A):这里fun1不是函数,而是指针变量,他指向一个函数,。这个函数有两个指针型参数,返回值也是一个指针。

四:函数指针数组

我们清楚char *(*pf)(char *p)定义的是一个函数指针。既然pf是指针,那么就可以存在数组里面。把该表达式修改一下:

char *(*pf[3])(char *p),这就是 定义了一个函数指针数组。pf是一个数组,数组存放3个指针,每个指针指向一个参数类型为指向字符的指针,返回类型为指向字符的指针的函数。

五 :函数指针数组的指针

函数指针数组的指针其实就是一个指针,只不过他指向一个数组,数组里存放的是指向函数的指针。

例如:char *(*(*pf)[3])(char *p)

pf是一个指针,指向一个包含3个元素的数组,这个数组存放的是指向函数的指针,这些指针指向一些参数类型为指向字符的指针,返回类型是指向字符的指针的函数。


1 0
原创粉丝点击