【发布时间】:2017-10-28 17:16:01
【问题描述】:
我刚刚在a coursera lecture 的 1:06 分钟想出了这个代码。它有什么作用?
int (*cmp)(char*, char*);
【问题讨论】:
-
总的来说,我觉得这个对指针的解释非常好:shop.oreilly.com/product/0636920028000.do
我刚刚在a coursera lecture 的 1:06 分钟想出了这个代码。它有什么作用?
int (*cmp)(char*, char*);
【问题讨论】:
这是一个指向函数的指针,该函数返回一个 int 并将两个字符指针作为参数。
基本规则归结为几件事:-
只需三个简单的步骤:
[X] or []
X大小...或数组未定义大小...(type1, type2)
type1 和type2 返回...
*参考:1.Clockwise-rule 2.right-left rule
【讨论】:
当您阅读 C 声明时,您必须阅读它们 butrophedonically(古希腊常用的石头书写方式)。
pointer to
function that
has (char*, char*) type parameters as input
and int as output
编辑:
【讨论】:
您粘贴的代码实际上是一个指向函数的指针。函数的prototype 可以是:
int cmp (char*, char*);
这个函数一共有三个部分:返回类型是一个整数,函数名是cmp,还有两个参数,都是一个指向一个字符(数组)的指针。具体来说,该函数用于排序,例如,如果第一个参数小于第二个参数,则该函数将返回负数,如果相等则返回零,如果大于则返回正数。例如,如果我有以下代码:
char c1 = 'a';
char c2 = 'b';
int result = cmp(&c1, &c2);
那么结果将是一个负数,例如-1,因为“a”小于“b”。在上面的函数调用中,我在每个参数之前添加了 &,因为参数数据类型是字符的指针/引用。 & 是获取变量地址的操作。
关于您提供的代码,实际上在函数名称cmp 之前多了一个*。这意味着您想要获取整个函数的引用,而不是任何单个变量或数组。例如下面是C语言中qsort函数的原型:
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
此函数的第三个参数实际上与您提供的代码非常相似。这样做的原因是您可以直接将整个函数作为参数传递给另一个函数,例如 qsort。
查看link 了解有关 C 中指针的详细信息。
我希望这能回答你的问题。
【讨论】: