为什么不需要声明变量来使用printf?

时间:2014-02-02 13:27:01

标签: c

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("%d",45);
    return 0;
}

它似乎不应该工作,因为我没有声明变量,但它仍然打印45(这是整个代码)。为什么我不需要在开头键入int a = 45

4 个答案:

答案 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 stacksubroutinecalling convention wikipages。

答案 2 :(得分:0)

因为你可以为函数提供参数。

答案 3 :(得分:0)

调用函数时,您提供的参数为逗号分隔的表达式,它们可以依次为标识符(a),文字(45)或更复杂的东西( a + b40 + 5a + 42等。

45a(假设其值45,显然)都是评估相同值的表达式,45,这是唯一的{{1}得到。