【发布时间】:2021-01-20 18:47:21
【问题描述】:
所以拿下面的代码,我正在阅读一些关于函数指针的讲义,我遇到了这个:
int (*Convert(const char code))(int, int) {
if (code == ‘+’) return ∑ // Takes two ints, and adds
if (code == ‘-’) return &Difference; // Takes two ints, and subtracts
}
int main () {
int (*ptr)(int,int);
ptr = Convert(‘+’);
printf( “%d\n”, ptr(2,4));
}
我通常习惯于在调用返回函数指针的函数时看到类似的内容,对我来说,这是有道理的,因为我在这里列出了所有参数,char 和两个 @987654323 @的:
Convert('-')(5, 6);
但是按照笔记中的写法,我无法真正理解这里到底发生了什么。有人能说出这到底是如何工作的吗?它与分配(*ptr)(int, int)函数的地址有关吗?
【问题讨论】:
-
这应该让你头疼。没有什么是不能用 typedef 修复的,总是你想用函数指针类型做的事情。使用
typedef int (*converter)(int left, int right);。现在它变得可读而不是 lisp:converter Convert(const char code) {...}
标签: c function function-pointers function-call