printf("%d",func(i));
Run Code Online (Sandbox Code Playgroud)
这可能在C?
我们认为这func(i)
是独立的功能,我们可以称之为内部printf
或scanf
?
是.虽然它在某些方面相当特殊,但它printf
只是另一种功能.函数调用可以是表达式的一部分.你传递给函数的参数本身就是表达式.
表达式是您可以计算的任何内容.所以
i + 1
Run Code Online (Sandbox Code Playgroud)
是一种表达.但是很简单
i
Run Code Online (Sandbox Code Playgroud)
也是一个(更简单)的表达.而且很简单
1
Run Code Online (Sandbox Code Playgroud)
是一个更简单的表达.
我们用更小的表达来构建大表达.因此,如果expr1
是表达式并且expr2
是另一个表达式,那么
expr1 + expr2
Run Code Online (Sandbox Code Playgroud)
是一个结合它们的更大的表达.
就像你可以使用两个小表达式(有时我们称之为"子表达式")并使用+
运算符组合它们以形成更大的表达式一样,我们也可以通过调用函数来获取一些表达式并将它们组合在一起:
f(expr1, expr2)
Run Code Online (Sandbox Code Playgroud)
现在,回到你的问题,电话
func(i)
Run Code Online (Sandbox Code Playgroud)
是一种表达.但是当你打电话时printf
,它希望看到的是什么
printf(expression, expression, expression, ...)
Run Code Online (Sandbox Code Playgroud)
现在,printf's
如果第一个表达式必须是一个字符串,它实际上总是一个常量字符串.但其余的参数可以是任何东西:1
,i
,i + 1
,func(1)
,或任何内容:
printf("%d %d %d %d %d\n", 1, i, i+1, func(i), i+1+func(i));
Run Code Online (Sandbox Code Playgroud)
当然,唯一需要担心的是,您%
在第一个参数中有符号(即格式字符串)中有多个表达式作为附加参数,并且这些附加参数的类型必须与预期的类型匹配由特定的格式说明你已经使用(%d
,%f
,%s
等).