2017-09-22 19 views
1
printf("%d",func(i)); 

これはCでも可能ですか?printf()の中で関数を呼び出すことはできますか?

func(i)は別の機能であると考えてみましょうか?printfまたはscanfの内部で呼び出すことはできますか?

+3

はい、もちろん、どうしてですか? – alain

+0

あなたはそれを試しましたか? –

+0

'func'は' int'を返します、* right *?もしそうなら、できることを確かめてください。そうでない場合は、 'printf'にあなたがいないときに' int'を与えていることを伝えて、それを止めてください。あなたの記事の最後の単語、 'scanf'はもっと複雑です。関数が*アドレス*を返すかどうかだけで意味があり、熟考する例はないので、おそらくこの質問には属しません。 – WhozCraig

答えて

1
#include<stdio.h> 

int sum(int ,int); 

void main() 
{ 
    int num1,num2; 
    printf("Enter two numbers: "); 
    scanf("%d %d",&num1,&num2); 
    printf("Sum of %d and %d is: %d",num1,num2,sum(num1,num2)); //function call in print statement 
    } 

    int sum(int num1,int num2)  //function to add two numbers`` 
    { 
      int result; 
      result=num1+num2; 
      return result; 
      } 
5

はい。それはいくつかの点でかなり特殊ですが、printfは単なる別の機能です。また、関数呼び出しは式の一部とすることができます。関数に渡す引数は、それ自体が式です。

式は計算できるものです。従って

i + 1 

は式です。しかし、単なる普通

i 

も(より単純な)式です。そしてちょうど平野

1 

はさらに簡単な表現です。

大規模な表現をリットラーのものから構築します。だから、expr1が表現され、expr2は別の表現で、その後、

expr1 + expr2 

場合は、それらを組み合わせた大きな表現です。

次の2つの小さな式を(時には我々は、これらの「部分式」と呼ぶ)を取ると、我々はまた、いくつかの式を取り、関数を呼び出すことによって、それらを一緒に組み合わせることができ+演算子を使用して、より大きな表現を形成するためにそれらを組み合わせることができるように:

f(expr1, expr2) 

、あなたの質問に戻って、コール

func(i) 

は式です。しかし、あなたはprintfを呼び出すときに、何が引数を参照することを期待してprintf's場合には、その最初の式は、文字列でなければならず、それは事実上、常に一定の文字列ですが、今

printf(expression, expression, expression, ...) 

です。心配する唯一の事は、もちろん、あなたがあなたのように追加の引数限り多くの表現を持っているということです

printf("%d %d %d %d %d\n", 1, i, i+1, func(i), i+1+func(i)); 

1ii + 1func(1)、またはちょうど約何でも:しかし、残りの引数は何もすることができます(%d%f%sなど)が必要とするタイプと一致する必要があります。これは、最初の引数(つまり、フォーマット文字列)に%の符号が付いています。

+0

'printf("%d "、func(i));に' func(i) 'を追加することができます。' printf'は '%d 'に対応する引数に対してこの型を予期します。 'func'は、' _Bool'、 'char'、' 'signed char''、' 'unsigned char''、' 'short''、' unsigned short''や 'int'自体のような、' int'に昇格する型を返す関数でなければなりません。 – chqrlie

関連する問題