2016-05-12 8 views
-1

と機能を指しますfという名前のintへのポインタですが、2番目の部分は私が確信している部分です。私は、最初の部分がある知っている私はC.</p> <pre><code>int (*f) (float *) </code></pre> <p>を学んでいて、私は、このコード行が正確に理解しようとしていますフロートへのポインタをキャストまたはポインタパラメータ

これはポインタで関数を指し、Fという名前のポインタだろう、これはポインタ・ツー・フロート

又は

にキャストされFと命名intへのポインタとして分類されるであろうパラメータ。

もし私がこのコンセプトを理解するのに少し苦労しているのであれば、誰かが助けてくれた理由とその違いを説明できれば素晴らしいだろう。

ありがとうございます!

+1

http://cdecl.org/の – user3528438

+0

可能な複製を[ツールをCコードを説明する](http://stackoverflow.com/questions/667362/tool-to-explain-c-code) – usr2564301

答えて

1

これは、関数float *floatポインタ)を取って、intを返すへのポインタとしてfを宣言します。その後、関数へのポインタを引数としてfloat *を受け入れ、intを返すように、その行がf宣言し、この

float array[5] = {1.0, 2.0, 3.0, 4.0, 5.0}; 
printf("%d\n", f(array)); 
+0

'3.5'は' float * 'ではありません。 – mch

3

のようにそれを使用することができます。

宣言がトリッキーに見えるかもしれませんが、我々は

int *f(float *); 

を書いた場合fint *を返す関数であるかのように、それはちょうどCのルールに従っているそして、それは思われます。したがって、正確な優先順位は、括弧を使用して強制的に行わなければなりません。*f

int foo(float *); 

関数定義であることが明らかになります:あなたが宣言を持っていた場合

+0

これは、ポインタ 'f'が' float * 'だけを受け入れることを意味するのでしょうか? – madhaj1

1

fooの代わりに(*f)を使用すると、関数へのポインタが得られます。ここで

2

どのようf、定義された関数ポインタを割り当てられ、その後、

#include <stdio.h> 

int foo(float *real) 
{ 
    float num = *real + 0.5F; 
    return (int)num; 
} 

int main(void) 
{ 
    float number = 4.9F; 
    int (*f) (float *) = foo;   // define f 
    printf("%d\n", f(&number));   // calls f 
    return 0; 
} 

プログラムの出力と呼ばれているの例です:

5 
+0

私は疑問につきましたが、ポインター引数 '* real'(これは私がうまく使っていない)がなくても、関数ポインタの使用を実際に示すために必要なものがもう一つは' * ' 。 –

関連する問題

 関連する問題