自己瞎写了一段代码,如下:
typedef char* pFunc(char*);
char* func1(char * p)
{
cout << p << endl;
return p;
}
int main()
{
pFunc (*c);
c = func1;
c("123");
}
这样使用的时候是 OK 的。
但是不能这样初始化一个变量,VC++编译器会提示:“=”不是左操作数
pFunc(c);
c = func1;
也不能这样
pFunc c;
c = func1;
搜不到一个比较合理的解释,请大佬赐教!
1
loriann 2020-05-29 17:31:14 +08:00
c 是什么? 没看懂
|
3
loriann 2020-05-29 17:34:55 +08:00
c 是什么类型的变量呢?
|
5
AlohaV2 2020-05-29 17:38:59 +08:00 via iPhone
typedef 返回值类型 (*函数名字)(参数...)
建议楼主早日用上 c++11,std::function 好用一些. |
7
loriann 2020-05-29 17:44:42 +08:00
哎,真是上火。怀疑自己多年 c++是不是喂了狗了。你可以这样用 pFunc* c = func1
|
9
TaylorJack123 2020-05-29 17:56:51 +08:00 via iPhone
你这 typedef 写错了,应该是 char* (*pFunc)(char*);
|
10
soy 2020-05-29 17:57:46 +08:00 1
|
11
ligiggy OP @TaylorJack123 凭什么说我写错了?
|
13
SPACELAN 2020-05-29 18:02:09 +08:00
还可以这样写
char* (*c)(char*) = func1; 懂我的意思吧 |
15
pright 2020-05-29 18:10:47 +08:00
楼主这样写也没问题的,你把那个括号去掉就好理解了。
pFunc *c; |
16
pright 2020-05-29 18:12:09 +08:00
EXAMPLE 4 On the other hand, typedef names can be used to improve code readability. All three of the
following declarations of the signal function specify exactly the same type, the first without making use of any typedef names. typedef void fv(int), (*pfv)(int); void (*signal(int, void (*)(int)))(int); fv *signal(int, fv *); pfv signal(int, pfv); |
17
pright 2020-05-29 18:12:16 +08:00
|
18
ligiggy OP @pright 嗯,谢谢指教。已经悟到了。这么些年白学了,偶然发现自己几年前写的博客,竟然看不懂了。
|
19
ashong 2020-05-29 18:40:51 +08:00
typedef 格式不对
``` typedef char* (*pFunc)(char*); char* func1(char * p) { std::cout << p << std::endl; return p; } int main() { pFunc c; c = func1; c("123"); return 0; } ``` |
20
livepps 2020-05-29 18:41:49 +08:00 via Android
pFunc 要声明指针函数吧,声明有问题
|
21
levelworm 2020-05-29 21:08:51 +08:00 via Android
这是函数吧?
还有,我绝逼在之前看到完全一样的问题,deja vu,这是怎么了! |
22
TaylorJack123 2020-05-30 14:43:21 +08:00 via iPhone
@ligiggy 我错了,恭喜你写对了^_^
|