这段C指针代码是做什么的?

4

我刚在coursera讲座的1分06秒时刻想出了这段代码。它是用来做什么的?

int (*cmp)(char*, char*);

1
总的来说,我认为这是一个非常好的指针解释:http://shop.oreilly.com/product/0636920028000.do - Oo.oO
可能是C函数指针语法的重复问题。 - dandan78
3个回答

10

这是一个指向函数的指针,该函数返回一个整数,并以两个字符指针作为参数。


基本规则可以归结为以下几点:

按以下三个简单步骤操作:

  • 从未知元素开始,沿着螺旋/顺时针方向移动; 当遇到以下元素时,请将它们替换为相应的英语语句:[X] or []
    1. 数组 X 大小为... 或 数组大小未定义...(type1, type2)
    2. 传递type1type2的函数返回...
    3. 指向...的指针。继续以螺旋/顺时针方向执行此操作,直到覆盖所有标记。始终首先解析括号中的内容!

参考资料:1.Clockwise-rule 2.right-left rule


6

阅读C语言声明时,您必须以蝴蝶式的方式阅读(这是古希腊常用的石头刻写方式)。

pointer to
  function that 
    has (char*, char*) type parameters as input
    and int as output

编辑:


1
你粘贴的代码实际上是指向一个函数的指针。该函数的原型可能是: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。

请查看此链接,了解关于C语言指针的详细信息。

希望这回答了你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接