[C++] typedef 指针函数问题

2020-05-29 17:25:45 +08:00
 ligiggy

自己瞎写了一段代码,如下:

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;

搜不到一个比较合理的解释,请大佬赐教!

1944 次点击
所在节点    程序员
22 条回复
loriann
2020-05-29 17:31:14 +08:00
c 是什么? 没看懂
ligiggy
2020-05-29 17:31:45 +08:00
@loriann c 是定义的变量名啊
loriann
2020-05-29 17:34:55 +08:00
c 是什么类型的变量呢?
ligiggy
2020-05-29 17:36:23 +08:00
@loriann pFunc 啊
AlohaV2
2020-05-29 17:38:59 +08:00
typedef 返回值类型 (*函数名字)(参数...)
建议楼主早日用上 c++11,std::function 好用一些.
ligiggy
2020-05-29 17:43:21 +08:00
@AlohaV2 你这个也不对啊,不是函数指针。
loriann
2020-05-29 17:44:42 +08:00
哎,真是上火。怀疑自己多年 c++是不是喂了狗了。你可以这样用 pFunc* c = func1
ligiggy
2020-05-29 17:47:38 +08:00
@loriann 卧槽好像是的。我的 c++喂了狗😂
TaylorJack123
2020-05-29 17:56:51 +08:00
你这 typedef 写错了,应该是 char* (*pFunc)(char*);
soy
2020-05-29 17:57:46 +08:00
ligiggy
2020-05-29 17:58:24 +08:00
@TaylorJack123 凭什么说我写错了?
ligiggy
2020-05-29 17:59:19 +08:00
@soy 666666666666
SPACELAN
2020-05-29 18:02:09 +08:00
还可以这样写

char* (*c)(char*) = func1;

懂我的意思吧
ligiggy
2020-05-29 18:02:41 +08:00
pright
2020-05-29 18:10:47 +08:00
楼主这样写也没问题的,你把那个括号去掉就好理解了。
pFunc *c;
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);
pright
2020-05-29 18:12:16 +08:00
ligiggy
2020-05-29 18:33:00 +08:00
@pright 嗯,谢谢指教。已经悟到了。这么些年白学了,偶然发现自己几年前写的博客,竟然看不懂了。
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;
}
```
livepps
2020-05-29 18:41:49 +08:00
pFunc 要声明指针函数吧,声明有问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/676777

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX