【问题标题】:Can we call a function inside printf()? [duplicate]我们可以在 printf() 中调用函数吗? [复制]
【发布时间】:2018-03-04 06:48:44
【问题描述】:
printf("%d",func(i));

这在 C 中可能吗?

让我们认为func(i) 是独立的函数,我们可以在printfscanf 内部调用它吗?

【问题讨论】:

  • 是的,当然,为什么不呢?
  • 当然。你试过了吗?
  • func 返回int?如果是这样,当然可以。如果不是,请停止对printf 撒谎,告诉它你在喂它int,而实际上你不是。您在帖子中的最后一句话scanf 更复杂。在那里,只有当函数返回一个 address 时才有意义,并且由于您没有提供示例来思考,它可能不属于这个问题。
  • 正式地你不称它为“内部”printf。在调用 printf 之前调用它,作为参数评估的一部分。
  • 查看答案:stackoverflow.com/a/28190271/2105501。它回答了您的确切问题!

标签: c


【解决方案1】:

是的。虽然它在某些方面相当特别,但printf 只是另一个功能。函数调用可以是表达式的一部分。传递给函数的参数本身就是表达式。

表达式是您可以计算的任何东西。所以

i + 1

是一个表达式。但是很简单

i

也是一个(更简单的)表达式。而且很简单

1

是一个更简单的表达式。

我们用较小的表达式构建大表达式。所以如果expr1是一个表达式,expr2是另一个表达式,那么

expr1 + expr2

是一个更大的表达式,将它们结合在一起。

正如您可以使用两个小表达式(有时我们称之为“子表达式”)并使用+ 运算符将它们组合成一个更大的表达式一样,我们也可以通过调用一个函数来获取一些表达式并将它们组合在一起:

f(expr1, expr2)

现在,回到你的问题,电话

func(i)

是一个表达式。但是当你调用printf 时,它期望看到的参数是

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

现在,在printf's 的情况下,第一个表达式必须是一个字符串,而且它实际上总是一个常量字符串。但剩下的参数可以是任何东西:1ii + 1func(1),或者任何东西:

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

当然,唯一需要担心的是,表达式与附加参数一样多,与第一个参数(即格式字符串)中的 % 符号一样多,以及这些附加参数的类型参数必须与您使用的特定格式说明符(%d%f%s 等)所期望的类型相匹配。

【讨论】:

  • 您可能会在printf("%d",func(i)); 中添加func(i) 必须提升为int,因为printf 期望此类型用于对应于%d 的参数。 func 必须是返回提升为 int 的类型的函数,例如 _Boolcharsigned charunsigned charshortunsigned shortint 本身。跨度>
【解决方案2】:
#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;
            }

【讨论】:

    猜你喜欢
    • 2011-07-14
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多