24小时热门版块排行榜    

查看: 280  |  回复: 2

jianchaoyv

金虫 (小有名气)

[交流] 【求助】请高手指点一个指针问题!!! 已有2人参与

char*(*c[10])(int **p) 这个语句的含义?

[ Last edited by jianchaoyv on 2010-12-13 at 20:47 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhougc

木虫 (正式写手)

黑社会老大

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+3):辛苦了! 2010-12-14 09:51:26
这个问题很有意思,
让我们一层一层的剥掉它
char*(*c[10])(int **p)
应该见过这样的结构吧?
int (*f)(int i)
f是一个函数指针,表示指向函数的首地址,其实这个结构和int f(int i)是完全一样的。
因为f表示函数的名称,指向函数的首地址,而(*f)也是指向函数的首地址。

其实char*(*c[10])(int **p)这个表达式和这个结构类似,只是:
int 对应于 char *,表示函数的返回值是字符指针;
f 对应于 c[10],表示函数指针是一个数组;
int i 对应于 int **p,表示参数是一个指向指针的指针;

那么c[10]表示函数指针又代表什么意思呢?
它其实是一个数组,这个数组中的每一个元素都是一个指向函数名的指针,
(*c[10])可以理解为有十个元素的数组,
每个元素都是指向一个函数名的指针。

综合起来这个表达式可以理解成这个样子:
有一个十个元素的数组,每个数组都是一个指向一个函数名的指针;
这个被指向的函数,它的参数是int **p,表示一个指向指针的指针;
而这个函数的返回值是char *型。

建议你看一下指针数组和数组指针、函数指针和指针函数的区别。
--------------------------------------------------------------------------看着我表情呆滞的头像,记住我!这个社会已经让我没办法笑出来.请各位版主按时缴...
2楼2010-12-13 22:32:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

linyujack

铜虫 (小有名气)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+3):一样辛苦了,欢迎常来程序语言版! 2010-12-14 09:51:57
(下面部分定义跟例子百度来的)

char *:
在C/C++中有专门的语义,既不同于signed char *,也不同于unsigned char *,专门用于指以'\0'为结束的字符串。

指向函数的指针:
函数名是该代码段的首地址,比如“int *fun()”。

双重指针:指向指针的指针,相当于一个二维数组。
------------------------------------------------------------------------
看这个例子:
#include   
void inc(int *val)   
{   
(*val)++;   
}   
main()  
 {   
   void (*fun)(int *);  
 int a=3;  
 fun=inc;  
 (*fun)(&a);  
 printf("%d" , a);  
 }
--------------------------------------------------------------
  char*(*c[10])(int **p) 与例子中的 void (*fun)(int *)很相似,
貌似声明了一个指向函数的指针:
指针所指向的函数的返回值为Char* 类型,
指针的命名存储在C[10]数组中,也就是有一组10个的指向函数的指针,
指针所指向的函数的传参为int型双重指针**p。

以上解释,纯属个人理解,没有程序验证过。
-----------------------------------------------------------------------
发晚一步,楼上已经有解。

[ Last edited by linyujack on 2010-12-13 at 22:39 ]
卓越不仅仅是单一的举动,而是一种习惯。
3楼2010-12-13 22:36:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 jianchaoyv 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见