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

问题描述:

我刚刚在a coursera lecture的分钟1:06提出了这段代码。它有什么作用?这个C指针代码是做什么的?

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

一般来说,我觉得这是一个相当不错的指针解释:http://shop.oreilly.com/product/0636920028000.do – mko

+0

[C函数指针语法](https:// stackoverflow。 com/questions/14114749/c-function-pointer-syntax) – dandan78

这是一个指向其中函数返回int,并采取作为参数2字符指针的函数。


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

有三个简单的步骤如下:

  • 与未知元素开始,以螺旋/顺时针方向移动; ecountering以下元素在与对应的英文语句代替它:[X] or []
    1. 阵列X大小...或数组未定义大小... (type1, type2)
    2. 函数传递type1type2回... *
    3. 指针指向...继续以螺旋/顺时针方向执行此操作,直到所有标记都被覆盖。首先解决任何括号内的问题!

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

当你读到C声明你必须阅读他们butrophedonically(古希腊的石头写的常见方式)。

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

编辑:

+3

LOL,Upvote for reference –

您粘贴的代码实际上是指向一个功能。该功能的prototype可能是: int cmp (char*, char*);

有三个部分在此函数:返回类型为整数,函数的名称是cmp并且有两个参数,所有这些都指向一个字符(数组)。具体来说,该函数用于排序,例如,如果第一个参数小于第二个参数,则该函数将返回一个负数,如果相等,则返回零,如果大于则返回一个正数。例如,如果我有以下代码:

char c1 = 'a'; 
char c2 = 'b'; 
int result = cmp(&c1, &c2); 

然后结果将是一个负数,例如, -1,因为'a'小于'b'。在上面的函数调用中,我在每个参数之前添加了&,因为参数数据类型是指向该字符的指针/引用。 &是获取变量地址的操作。

关于您提供的代码,实际上在功能cmp的名称前面还有一个额外的*。这意味着你想获得整个函数的引用,而不是任何单个变量或数组。例如,下面是功能qsort的在C原型:

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

这个函数的第三个参数其实是非常相似的,你所提供的代码。这样做的原因是您可以直接将整个函数传递给另一个函数,例如qsort作为参数。

看看这个link的有关C.

我希望这回答了你的问题指针的细节。