#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%d",45);
return 0;
}
它似乎不应该工作,因为我没有声明变量,但它仍然打印45(这是整个代码)。为什么我不需要在开头键入int a = 45
?
答案 0 :(得分:1)
原因其实很简单,为什么你可以将printf中的字符串作为格式字符串传递而不是通过变量传递。
#include <stdio.h>
#include <stdlib.h>
int main()
{
/* you could have used :
* int x = 42;
* char *fmt = "%d";
* printf(fmt, x);
*/
printf("%d",45);
return 0;
}
,主要原因是传递给函数的值存在于被调用函数的堆栈中,它不想知道调用函数中的值是什么。
int x = 42; //meaning of the universe by the way; //also a local variable
对于只有在其范围内具有它的函数很重要。一个名为sum(int,int)的函数不想知道你调用它的是什么,因为在传递值时,该值将被复制到sum的堆栈中。
int result = sum(x, x);
所以,在main函数中,虽然你把它称为x,但sum并不关心。我认为现在应该足够清楚了。欢呼声。
答案 1 :(得分:0)
您的main
功能中没有任何[本地]变量。 45是常数,而不是变量。然后将该值作为函数参数传递给printf
。
首先阅读call stack,subroutine和calling convention wikipages。
答案 2 :(得分:0)
因为你可以为函数提供参数。
答案 3 :(得分:0)
调用函数时,您提供的参数为逗号分隔的表达式,它们可以依次为标识符(a
),文字(45
)或更复杂的东西( a + b
,40 + 5
,a + 42
等。
45
和a
(假设其值45
,显然)都是评估相同值的表达式,45
,这是唯一的{{1}得到。