2017-10-28 13 views
4

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

答えて

10

これは、関数がintを返し、引数として2つの文字ポインタを受け取る関数へのポインタです。


基本的なルールは、いくつかのことに沸く: -

従うべき3つの簡単な手順があります。

  • 未知の要素を皮切りに、スパイラル/時計回りに移動します。 [X] or []
    1. の配列Xサイズ...またはtype1と返すtype2を渡す(type1, type2)
    2. 機能...の配列未定義サイズ... *
    3. :ecounteringときは、次の要素は、対応する英語の文に置き換えます
    4. へのポインタすべてのトークンがカバーされるまで、螺旋/時計回りの方向にこれを続けます。最初にかっこ内の何かを解決してください!

参考:あなたはCの宣言を読んだとき 1. Clockwise-rule 2. right-left rule

6

あなたは彼らに古代ギリシャでは、石の書き込みのbutrophedonically(一般的な方法を読まなければなりません)。

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

EDIT:あなたが貼り付けられている

+3

LOL、Upvote for reference –

1

コードは実際には関数へのポインタです。機能のprototypeは次のようになります。 int cmp (char*, char*);

三つの部分は、この機能にあります。戻り値の型は、整数、関数の名前がcmpで、へのポインタであるすべてのそれらの2つの引数が、存在しています文字(配列)。具体的には、関数はソートに使用されます。たとえば、最初の引数が2番目の引数よりも小さい場合、関数は負の数を返し、等しい場合は0を返し、大きい場合は正の数を返します。私は、次のコードを持っている場合、例えば:

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*))

この関数の3番目の引数は、実際にあなたが提供したコードと非常によく似ています。その理由は、関数全体を引数として別の関数、例えばqsortに直接渡すことができるからです。

は、私はこれがあなたの質問に答える願うC.

内のポインタについての詳細は、このlinkのを見てみましょう。

関連する問題