| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 516 人关注过本帖
标题:函数指针问题
只看楼主 加入收藏
forestpeak
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-12-12
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:4 
函数指针问题
int *p(int a)
int (*p)(int a)
int *(*p)(int a)
这几个有什么区别
还有就是***p到底怎么用
还有int a[2][2],*p;p=*a是正确的,为什么
2010-12-31 20:12
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
int *p(int a)//函数的返回值是指向整形的指针,这里p是函数名  不是变量
int (*p)(int a)//定义p指向参数为int类型返回值为int类型的指针
int *(*p)(int a)//首先p是一个指针  p指向了一个参数为int类型  返回值为指向int类型的指针
这几个有什么区别
还有就是***p到底怎么用  //三级指针  用于三维数组
还有int a[2][2],*p;p=*a是正确的,为什么   //a是二级指针 也就是指向整形数据的指针的指针  那么
//*a还是个指针他指向整形数据  和p类型相同  所以可以赋值  

                                         
===========深入<----------------->浅出============
2010-12-31 21:11
马后炮
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:156
专家分:560
注 册:2010-12-17
收藏
得分:0 
楼上解释的真好

樱之雪,晓之车
2011-01-01 13:10
落拓
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:58
专家分:173
注 册:2010-9-29
收藏
得分:10 
右左法则:首先从未定义的标识符(一般是变量)看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。

先解释第二个,int (*p)(int a)。 p是之前未定义的标识符,从它读起。往右是括号,转头。 是一个* ,所以 p 是一个指针。再往左,是括号。跳出括号,再转头往右。又碰到括号,这个是一个函数的书写形式。所以,p是一个指针,指向一个函数。另外,包含*p的那个括号和函数的括号是并列的。再往转头左,是int ,说明返回值是一个整型。对于第三个,int *(*p)(int a)。往左后,是一个*, 这个* 是属于int的,因为包含*p的那个括号和函数的括号是并列的。所以返回函数返回一个整型指针。假如不是并列的话,比如 int   (*(*func)[5])(int   *p) 包含 *fun的括号不是和函数的括号并列的,所以,(*(*func))的第一个 * 不是int的。楼主试着解释int   (*(*func)[5])(int   *p) 吧。不懂的话再问我。
2011-01-01 16:29
马后炮
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:156
专家分:560
注 册:2010-12-17
收藏
得分:0 
以下是引用落拓在2011-1-1 16:29:13的发言:

右左法则:首先从未定义的标识符(一般是变量)看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。

先解释第二个,int (*p)(int a)。 p是之前未定义的标识符,从它读起。往右是括号,转头。 是一个* ,所以 p 是一个指针。再往左,是括号。跳出括号,再转头往右。又碰到括号,这个是一个函数的书写形式。所以,p是一个指针,指向一个函数。另外,包含*p的那个括号和函数的括号是并列的。再往转头左,是int ,说明返回值是一个整型。对于第三个,int *(*p)(int a)。往左后,是一个*, 这个* 是属于int的,因为包含*p的那个括号和函数的括号是并列的。所以返回函数返回一个整型指针。假如不是并列的话,比如 int   (*(*func)[5])(int   *p) 包含 *fun的括号不是和函数的括号并列的,所以,(*(*func))的第一个 * 不是int的。楼主试着解释int   (*(*func)[5])(int   *p) 吧。不懂的话再问我。
强悍!!!!!!!!!!!!

樱之雪,晓之车
2011-01-01 16:36
快速回复:函数指针问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039176 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved