加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

(*)在普通C中意味着什么?

发布时间:2020-12-16 05:17:59 所属栏目:百科 来源:网络整理
导读:我无法在以下语句中获得“(*)”表达式的含义: #define PySpam_System (*(PySpam_System_RETURN (*)PySpam_System_PROTO) PySpam_API[PySpam_System_NUM]) 哪里 #define PySpam_System_NUM 0#define PySpam_System_RETURN int#define PySpam_System_PROTO
我无法在以下语句中获得“(*)”表达式的含义:
#define PySpam_System 
 (*(PySpam_System_RETURN (*)PySpam_System_PROTO) PySpam_API[PySpam_System_NUM])

哪里

#define PySpam_System_NUM 0
#define PySpam_System_RETURN int
#define PySpam_System_PROTO (const char *command)

(摘自http://docs.python.org/2/extending/extending.html).这意味着什么? (请原谅我一个愚蠢的问题).类似于函数指针,但语法非常混乱.

更新:感谢Shahbaz和Jonathan,事情变得越来越明显,但我仍然无法获得两个细微差别:

>为什么是const char *命令,而不仅仅是const char *.我认为在函数指针类型声明和类型转换中应该省略参数的名称?所以一定不能省略,而是可以吗?
>为什么(*(int(*)(const char * command)),而不仅仅是(int(*)(const char * command)?外部的目的是什么(* [其他所有这里])?它是可选的解引用函数指针指向函数本身,对吧?

解决方法

PySpam_System_RETURN (*)PySpam_System_PROTO

扩展为:

int (*)(const char *command)

这是一个函数指针类型.所以基本上如下:

(*(PySpam_System_RETURN (*)PySpam_System_PROTO) PySpam_API[PySpam_System_NUM])

转换为:

(*(int (*)(const char *command)) PySpam_API[0])

正在调用PySpam_API [0]的值,好像它是一个带有const char *参数和int返回值的函数(强制转换为函数指针).请注意,这仍然缺少参数,因此无论谁使用宏都应该为它提供参数,例如:

PySpam_System("some string");

在您的更新:

>参数名称是可选的.他们可能刚刚写了const char *.我相信这个名字是为了清晰起见而写的.现在,在没有其他任何地方的情况下,我明白该功能需要一个命令,所以我会说这很有帮助.>再一次,你是对的.初始*取消引用函数指针.在C中,这是非常可选的.把它放得更加对称,因为你正在取消引用一个指针,但是由于没有取消引用一个函数指针没有意义,如果你不取消引用它就没有任何区别,C会做唯一合理的事情为了你.事实上,即使你把******而不是一个,它仍然可以工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读