由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 出个题考考大家:)
相关主题
谁给解释一下这个c questiondifference between: char** p and char*p[] ??
BigEndian和LittleEndian的设计内存管理的问题
问一个函数指针的问题,c++问个char*的问题
求助,如何才能将一个c++对象封装成一个函数指针。数组问题
请问const myClass &src 和myClass const &src有什么区别?数组指针的问题
关于传递函数指针简单的c code问题
pointer to function琢磨了一下c++ smart pointer,发现不能到处用
typedef const char *month Table[3]C 语言,初学者问题(4),读取字符指针内容
相关话题的讨论汇总
话题: char话题: ff话题: fa话题: pointer话题: function
进入Programming版参与讨论
1 (共1页)
T*******x
发帖数: 8565
1
下面程序中的ff是如何工作的?
char *fa()
{
return "hello world";
}
char *(*ff(char *(*fb)()))()
{
return fb;
}
int main()
{
printf("%s\n", (*ff)(fa)());
}
t****t
发帖数: 6806
2
just use cdecl to "explain" it and you get the result.

【在 T*******x 的大作中提到】
: 下面程序中的ff是如何工作的?
: char *fa()
: {
: return "hello world";
: }
: char *(*ff(char *(*fb)()))()
: {
: return fb;
: }
: int main()

h****8
发帖数: 599
3
ff不就是一个以函数指针为形参的函数指针么
d***i
发帖数: 344
4
...打回去重新看

【在 h****8 的大作中提到】
: ff不就是一个以函数指针为形参的函数指针么
z****e
发帖数: 2024
5
不懂这个
char *(*ff(char *(*fb)()))()
{
return fb;
}
char *( *ff(相同类型函数指针) )()//怎么后面接着就给函数定义了?
{
return fb;
}
这个定义是定义什么?难道是函数指针?
{
return fb;
}
y***d
发帖数: 2330
6
ff
ff() ff 是一个函数
*ff() ff 返回一个指针
*ff(xxx) ff 的参数是 xxx
(*ff())() ff 返回的指针指向一个函数
char *(*ff())() 这个函数的返回返回值是 char *
* () 的优先级问题

【在 z****e 的大作中提到】
: 不懂这个
: char *(*ff(char *(*fb)()))()
: {
: return fb;
: }
: char *( *ff(相同类型函数指针) )()//怎么后面接着就给函数定义了?
: {
: return fb;
: }
: 这个定义是定义什么?难道是函数指针?

j***i
发帖数: 1278
7
try 了 char *(*ff(char *(*fb)()))()
syntax error

【在 t****t 的大作中提到】
: just use cdecl to "explain" it and you get the result.
t******s
发帖数: 119
8
en

【在 j***i 的大作中提到】
: try 了 char *(*ff(char *(*fb)()))()
: syntax error

t****t
发帖数: 6806
9
把fb去掉再来, cdecl不接受参数名, 比如说
cdecl> explain char foo(char)
declare foo as function (char) returning char
cdecl> explain char foo(char x)
syntax error
所以
cdecl> explain char *(*ff(char *(*)()))()
declare ff as function (pointer to function returning pointer to char)
returning pointer to function returning pointer to char

【在 j***i 的大作中提到】
: try 了 char *(*ff(char *(*fb)()))()
: syntax error

d***i
发帖数: 344
10
re!

【在 t****t 的大作中提到】
: 把fb去掉再来, cdecl不接受参数名, 比如说
: cdecl> explain char foo(char)
: declare foo as function (char) returning char
: cdecl> explain char foo(char x)
: syntax error
: 所以
: cdecl> explain char *(*ff(char *(*)()))()
: declare ff as function (pointer to function returning pointer to char)
: returning pointer to function returning pointer to char

相关主题
关于传递函数指针difference between: char** p and char*p[] ??
pointer to function内存管理的问题
typedef const char *month Table[3]问个char*的问题
进入Programming版参与讨论
j***i
发帖数: 1278
11
master 谢谢

【在 t****t 的大作中提到】
: 把fb去掉再来, cdecl不接受参数名, 比如说
: cdecl> explain char foo(char)
: declare foo as function (char) returning char
: cdecl> explain char foo(char x)
: syntax error
: 所以
: cdecl> explain char *(*ff(char *(*)()))()
: declare ff as function (pointer to function returning pointer to char)
: returning pointer to function returning pointer to char

T*******x
发帖数: 8565
12
这道题我的意图是要定义一个函数ff,
接受一个函数指针作为参数,然后返回一个函数指针。
用typedef表达就是这样的:
typedef char *(*FPtr)();
FPtr ff(FPtr fb)
{
return fb;
}
如果不用typedef,展开之后就是下面的样子。

【在 T*******x 的大作中提到】
: 下面程序中的ff是如何工作的?
: char *fa()
: {
: return "hello world";
: }
: char *(*ff(char *(*fb)()))()
: {
: return fb;
: }
: int main()

t****t
发帖数: 6806
13
你这又不是什么新鲜问题, UNIX里很早就有这样的API了.
void (*signal(int sig, void (*func)(int)))(int);

【在 T*******x 的大作中提到】
: 这道题我的意图是要定义一个函数ff,
: 接受一个函数指针作为参数,然后返回一个函数指针。
: 用typedef表达就是这样的:
: typedef char *(*FPtr)();
: FPtr ff(FPtr fb)
: {
: return fb;
: }
: 如果不用typedef,展开之后就是下面的样子。

T*******x
发帖数: 8565
14
出个小题玩玩而已:)

【在 t****t 的大作中提到】
: 你这又不是什么新鲜问题, UNIX里很早就有这样的API了.
: void (*signal(int sig, void (*func)(int)))(int);

h****8
发帖数: 599
15
哪里错了 楼下都说了
declare ff as function (pointer to function returning pointer to char)
returning pointer to function returning pointer to char

【在 d***i 的大作中提到】
: ...打回去重新看
t****t
发帖数: 6806
16
但是你不是这么说的.

【在 h****8 的大作中提到】
: 哪里错了 楼下都说了
: declare ff as function (pointer to function returning pointer to char)
: returning pointer to function returning pointer to char

d***i
发帖数: 344
17
......ft
你抬头看看你自己的上一贴,再看这个。ff是个函数,不是函数指针。。。哎。。。你
也许是笔误吧。。。

【在 h****8 的大作中提到】
: 哪里错了 楼下都说了
: declare ff as function (pointer to function returning pointer to char)
: returning pointer to function returning pointer to char

d***i
发帖数: 344
18
嗯,当时看到这个还是问了guru才弄明白的。。。
想起那个时候,学了一个学期c,去看linux的一些代码,居然觉得跟天书一样,哈哈~

【在 t****t 的大作中提到】
: 你这又不是什么新鲜问题, UNIX里很早就有这样的API了.
: void (*signal(int sig, void (*func)(int)))(int);

p***o
发帖数: 1252
19
其实也不能怪你不明白,那么写是给compiler看的,人看的
还是用typedef把。

【在 d***i 的大作中提到】
: 嗯,当时看到这个还是问了guru才弄明白的。。。
: 想起那个时候,学了一个学期c,去看linux的一些代码,居然觉得跟天书一样,哈哈~

T*******x
发帖数: 8565
20
同意。

【在 p***o 的大作中提到】
: 其实也不能怪你不明白,那么写是给compiler看的,人看的
: 还是用typedef把。

相关主题
数组问题琢磨了一下c++ smart pointer,发现不能到处用
数组指针的问题C 语言,初学者问题(4),读取字符指针内容
简单的c code问题一个C语言的面试题,有点乱,麻烦看一下
进入Programming版参与讨论
h****8
发帖数: 599
21
哦 是错了
那为什么是函数不是函数指针 他后面Main里调用的时候还是(*ff)的不是么

【在 d***i 的大作中提到】
: ......ft
: 你抬头看看你自己的上一贴,再看这个。ff是个函数,不是函数指针。。。哎。。。你
: 也许是笔误吧。。。

p***o
发帖数: 1252
22
一回事,你写ff(fa)()也行。

【在 h****8 的大作中提到】
: 哦 是错了
: 那为什么是函数不是函数指针 他后面Main里调用的时候还是(*ff)的不是么

t****t
发帖数: 6806
23
this is redundant, you can write the call as
ff(fa)()
for example, fa() is equivalent to (*fa)(), since fa (function) can be impli
citly cast to pointer-to-function, then dereferenced (by *) to the original
function.
i think OP just want to make it obscure.

【在 h****8 的大作中提到】
: 哦 是错了
: 那为什么是函数不是函数指针 他后面Main里调用的时候还是(*ff)的不是么

t****t
发帖数: 6806
24
ft, your post so short, faster than me.

【在 p***o 的大作中提到】
: 一回事,你写ff(fa)()也行。
p***o
发帖数: 1252
25
I am 30 min late already ...

【在 t****t 的大作中提到】
: ft, your post so short, faster than me.
t****t
发帖数: 6806
26
no one keep watching this board anyway.

【在 p***o 的大作中提到】
: I am 30 min late already ...
p***o
发帖数: 1252
27

impli
original
对,把人当parser用没意义。

【在 t****t 的大作中提到】
: this is redundant, you can write the call as
: ff(fa)()
: for example, fa() is equivalent to (*fa)(), since fa (function) can be impli
: citly cast to pointer-to-function, then dereferenced (by *) to the original
: function.
: i think OP just want to make it obscure.

h****8
发帖数: 599
28
oic. thx

impli
original

【在 t****t 的大作中提到】
: this is redundant, you can write the call as
: ff(fa)()
: for example, fa() is equivalent to (*fa)(), since fa (function) can be impli
: citly cast to pointer-to-function, then dereferenced (by *) to the original
: function.
: i think OP just want to make it obscure.

T*******x
发帖数: 8565
29
这个我还真不知道,并不是想使问题更加obscure。
fa()本不应该和(*fa)()等效----逻辑上似乎不自然。
当然从函数指针赋值的方法来看,它们就是等效的。
这个地方不完全符合逻辑,这是C得处理方法。

impli
original

【在 t****t 的大作中提到】
: this is redundant, you can write the call as
: ff(fa)()
: for example, fa() is equivalent to (*fa)(), since fa (function) can be impli
: citly cast to pointer-to-function, then dereferenced (by *) to the original
: function.
: i think OP just want to make it obscure.

d***i
发帖数: 344
30
嗯,我看到这个调用的时候也咯噔了一下,还把代码试了一下。

【在 T*******x 的大作中提到】
: 这个我还真不知道,并不是想使问题更加obscure。
: fa()本不应该和(*fa)()等效----逻辑上似乎不自然。
: 当然从函数指针赋值的方法来看,它们就是等效的。
: 这个地方不完全符合逻辑,这是C得处理方法。
:
: impli
: original

相关主题
请问可以这样定义struct吗?BigEndian和LittleEndian的设计
关于Function Pointer的简单问题,望指教问一个函数指针的问题,c++
谁给解释一下这个c question求助,如何才能将一个c++对象封装成一个函数指针。
进入Programming版参与讨论
n******t
发帖数: 4406
31

~~~~~~~~~~~~~~~~
这是对于人的逻辑不自然,
对compiler来说挺自然的。

【在 T*******x 的大作中提到】
: 这个我还真不知道,并不是想使问题更加obscure。
: fa()本不应该和(*fa)()等效----逻辑上似乎不自然。
: 当然从函数指针赋值的方法来看,它们就是等效的。
: 这个地方不完全符合逻辑,这是C得处理方法。
:
: impli
: original

T*******x
发帖数: 8565
32
fa==*fa => fa==*fa==**fa==***fa ...
这是C语言对于函数类型单独的处理方法,和其他的类型的处理方法不同。
对于compiler为什么自然呢?

【在 n******t 的大作中提到】
:
: ~~~~~~~~~~~~~~~~
: 这是对于人的逻辑不自然,
: 对compiler来说挺自然的。

1 (共1页)
进入Programming版参与讨论
相关主题
C 语言,初学者问题(4),读取字符指针内容请问const myClass &src 和myClass const &src有什么区别?
一个C语言的面试题,有点乱,麻烦看一下关于传递函数指针
请问可以这样定义struct吗?pointer to function
关于Function Pointer的简单问题,望指教typedef const char *month Table[3]
谁给解释一下这个c questiondifference between: char** p and char*p[] ??
BigEndian和LittleEndian的设计内存管理的问题
问一个函数指针的问题,c++问个char*的问题
求助,如何才能将一个c++对象封装成一个函数指针。数组问题
相关话题的讨论汇总
话题: char话题: ff话题: fa话题: pointer话题: function