社区
C语言
帖子详情
char (*(*x())[])() 是什么意思?
yinguoyi
2002-05-17 12:22:17
char (*(*x())[])() 是什么意思?
是指一个什么函数?
...全文
826
23
打赏
收藏
char (*(*x())[])() 是什么意思?
char (*(*x())[])() 是什么意思? 是指一个什么函数?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
eion
2002-08-19
打赏
举报
回复
根据优先级:
char ( * ( * x ( ) ) [ ] ) ( )
-----
x()说明x是个函数,函数的参数为空,函数的返回值为下面:
char ( * ( * x ( ) ) [ ] ) ( )
=------
函数的返回值是个指针, (*x())
char ( * ( * x ( ) ) [ ] ) ( )
------------=====
指向一个数组 (*x())[]
char ( * ( * x ( ) ) [ ] ) ( )
=----------------
数组的元素是指针(*(*x())[])
char ( * ( * x ( ) ) [ ] ) ( )
==== ----------------------===
而指针是指向函数的(*(*x())[])(),显然,函数的参数为空
函数的返回值为char型
windz
2002-08-19
打赏
举报
回复
可读性太差! 改~~~~
我想你一定在做白痴的考试题目吧~ 哎………… :(
sh210
2002-08-19
打赏
举报
回复
指向函数指针的指针数组
写这样代码的人,肯定身心都遭受过严重打击,再打击的人,疯了,疯了,哎……
建议大家都不要这样写
Tommy
2002-08-19
打赏
举报
回复
这种函数在真实环境中应该是可以找得到的,有一定的用途。这里的问题主要是定义得不够清楚,没用typedef定义而已。其实真实环境中的很多类型如果不用typedef定义的话,可能比这难看也不少,不过用了typedef就不太觉得而已
xiaoniaoleyuan
2002-08-19
打赏
举报
回复
太难懂了,用在考试的时候还可以接受,但是在软件设计的时候未免太那个了吧,现在追从就是“简单就好”。。。。。。
tsds
2002-05-21
打赏
举报
回复
清楚了
HostOOP
2002-05-21
打赏
举报
回复
阿牛哥说到点子上了,我以前只是知其然,不知其所以然,现在算是恍然大悟了。可惜我不是楼主,否则100分相赠。
delphihero
2002-05-21
打赏
举报
回复
1
char (*(*x())[])() 返回char 型函数的指针数组的指针的函数。
写这种函数的不是疯子就是白痴
xwu
2002-05-19
打赏
举报
回复
Thinking in C++ 里 作者介绍了一个简单的方法来解读复杂的定义式, 称为right-left guideline. 简单的说就是从中间的变量名开始, 按右-左-右-左...的顺序来读. 以这个题目为例:
char (*(*x())[])()
从x开始:
1.向右看到(), x是一个函数定义, 没有参数;
2.向左看到*, x的返回值是指针;
3.向右看到[], 指针指向数组;
4.向左看到*, 数组的元素也是指针;
5.向右看到(), 指针指向的是函数, 即函数指针, 而且函数没有参数.
6.向左看到char, 函数的返回值是char.
所以, x是一个没有参数的函数, 它的返回值是指向一个数组的指针, 而这个数组的元素是函数指针, 指向的函数没有参数, 且返回char.
welkinsun
2002-05-18
打赏
举报
回复
同意上面的解释,不过这样的代码可读性不高,应该废除。
Agree with upstairs. But it's must be avoided because of be hard to read
zhenshi
2002-05-18
打赏
举报
回复
这种句字一句还好搞定,要在程序里多几句这样的句子可就。。。
prototype
2002-05-18
打赏
举报
回复
其实,char (*(*x())[])()等价为
typedef char (*x_t) ()
x_t[] x()
^^^^^^^^^
what is that? it won't compile...
winmain(温妹)'s analysis is correct.
Januarius_
2002-05-17
打赏
举报
回复
指向函数指针的指针数组
晨星
2002-05-17
打赏
举报
回复
不,那边也有高手。
yinguoyi
2002-05-17
打赏
举报
回复
总算弄明白了。 C/C++论坛真是人才济济。
隔壁VC论坛差得很, 都只会在IDE上指指点点几下子,
以为熟悉M$VC环境就算理解了C/C++.
dot99
2002-05-17
打赏
举报
回复
每次看到这个的时候就头痛~~~~~~FT
简单点还好,复杂了就要累4人了
不过,写这样的东西好象没有实际的用处
还是用typedef简化一下好得多
HostOOP
2002-05-17
打赏
举报
回复
其实,char (*(*x())[])()等价为
typedef char (*x_t) ()
x_t[] x()
参考Linux/Unix环境下函数signal的原型:
void (*signal(int signum,void(*sighandler)(int)))(int).
它可以等价为:
typedef void (*sig_t)(int);
sig_t signal(int,sigt_t);
这样就清晰了!
winmain
2002-05-17
打赏
举报
回复
1.可编译通过的函数x的实现:
typedef char (*FP)(); //FP为函数指针
typedef FP (*PAFP)[]; //指向FP数组的指针
PAFP p;
char (*(*x())[])()
{
return p;
}
2.x的定义可简化为:
PAFP p;
PAFP x()
{
return p;
}
prototype
2002-05-17
打赏
举报
回复
i think that is a little bit different...
if you meant that the returned value is 'a pointer to an array of ...', then we are agreed.
xwu
2002-05-17
打赏
举报
回复
To prototype(原型):
How about:
>it is a function type, which takes no argument and returns a
>pointer of a type that is an array of pointers to another
^^^^^^^^^^^^^^^^^^^^
>function type that returns 'char' and takes no argument...gee!
my 2 cents.
加载更多回复(3)
MySQL 数据类型和运算符
Re: MySQL 数据类型和运算符=============================# 数据类型 整数类型:五种 TINY SMALL MEDIUM INT BIG 浮点和定点小数类型:三种 FLOAT DOUBLE DECIMAL 日期与时间数据类型:五种 YEAR -1 字符串类型:二种
CHAR
(M) VAR
CHAR
(M) -1 二进制字符串:位字段BIT 固定BINARY 可变VARBINARY -1 # 运算符 算术 运算符 比较 运算符 逻辑 运算符 位操作 运算符 运算符的优先级-------------------------------------
(
char
*)&x 和
char
*&x
(
char
*)&x : 是取x的地址,强制转换为
char
型指针例: int x;
char
*pc;若要让pc指向x;则可用 pc=(
char
*)&x; 或者{ int x,*p1;
char
*pc; p1=&x; pc=(
char
*)p1; }
c语言中
char
* 和 unsigned
char
* 的区别浅析
背景最近在项目中遇到了一个编译警告,是因为定义的变量为
char
[],而在使用时作为函数的unsigned
char
*类型的参数调用。这个警告很容易避免,但是
char
*和unsigned
char
*到底有什么区别呢,本文作一个简单的探讨。
char
和 unsigned
char
的区别在C中,默认的基础数据类型均为signed,如定义变量为int,long等,都为有符号的。如果要定义无符号类型,必须显
char
* 定义的字符串为什么修改不了?(
char
*最好还是写成 const
char
*)
### 我们或许都知道
char
型数组与
char
* 都能够用来定义字符串,但可能不清楚
char
*定义字符串 有着不一样的地方。 用
char
* 来定义一个字符串,当我们试图对字符串的内容进行改动,即直接进行 改动,或进行传参,在子函数中进行改动。都改动失败,而用
char
型数组定义的字符串进行 改动操作则成功。 ●原因是什么: 由于
char
型数组是一段连续的存储空间,所以内容是可以改变的 而
char
*定义的字符串存储在字符常量区,是不可以修改的。 我们知道
char
*用来定义一个指针变量时,指针变量是可以改变
const
char
*p,
char
const *p和
char
*const p区别(面试题常见)
请看下面三种定义: const
char
*p;
char
const *p;
char
* const p; 请问三者有什么区别? 先看第一种,先看p,根据优先级它和*结合,是指针,指向
char
类型,但是
char
前面有一个const修饰,所以p所指向的内容为const类型不可修改。 第二种:由于没有const *的运算,若出现const *的形式,则const实际上是修...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章