xyjzsh

数组、函数指针问题

首先说一下数组指针和函数指针的定义问题。
一条重要的规则:函数和数组修饰符的优先级比指针修饰符的优先级高。函数的修饰符为()、数组的修饰符为[]、指针的修饰符为*。
eg:
int *A[N]: 等价于(int*)(A[N]):A[N]表示有N个元素的数组。元素类型为int*
int (*A)[N]:因为有括号提高了*的优先级。所以等价于int ((*A)[N])。表示A是一个指针。A指向的是含有N个元素的数组。数组中存放的元素为int型。


对于指向函数的指针。
int (*afp2[N])(); afp2[N]表示afp2是个含有N个元素的数组。数组中的元素为指向返回值为int、无参数的函数指针。
因为函数的声明较为复杂。可以用typedef来使代码更加明确。
我们用typedef来改写上面的声明。
typedef int (*FP)();//定义FP为返回值为int、参数列表为空的函数的类型。
FP afp2[N];//含有N个元素的数组,返回值为FP。

将一个函数的地址初始化或赋值给一个指向函数的指针时,无需显示的取其地址。编译器知道隐式的取其地址。

void*可以指向任意类型的数据。
不存在可以指向任意类型函数的通用指针。

posted on 2010-12-15 11:39 呆人 阅读(250) 评论(0)  编辑 收藏 引用 所属分类: 数据结构


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜