#include <stdio.h>
void doubleValue()
{
auto int autoNum=5;
static int staticNum=5;
autoNum=autoNum*2;
staticNum=staticNum*2; //每次调用都使用上一次结果
printf("autoNum:%d,staticNum:%d\n",autoNum,staticNum);
}
int main()
{
printf("第一次调用:\n");
doubleValue();
printf("第二次调用:\n");
doubleValue();
printf("第三次调用:\n");
doubleValue();
return 0;
}
一、整体功能概述
这段 C 语言代码定义了一个函数 doubleValue
,在这个函数中有一个自动存储类型的变量 autoNum
和一个静态存储类型的变量 staticNum
。在 main
函数中,通过三次调用 doubleValue
函数,展示了自动变量和静态变量在多次函数调用中的不同行为。
二、具体代码分析
-
#include <stdio.h>
- 这是预处理指令,引入标准输入输出头文件。这个头文件包含了诸如
printf
等输入输出函数的声明,使得在后续的代码中可以使用这些函数。
- 这是预处理指令,引入标准输入输出头文件。这个头文件包含了诸如
-
void doubleValue()
- 定义了一个名为
doubleValue
的无返回值函数。这个函数在后续的代码中会被多次调用。
- 定义了一个名为
-
auto int autoNum = 5;
和static int staticNum = 5;
- 在
doubleValue
函数内部,声明了两个变量。 autoNum
是自动存储类型的整数变量,初始值为 5。在 C 语言中,自动变量通常存储在栈上,它们的生命周期与所在的代码块相关。每次进入函数时,自动变量会被重新初始化。staticNum
是静态存储类型的整数变量,也初始值为 5。静态变量在程序的整个生命周期内都存在,并且只在第一次初始化时赋值。在后续的函数调用中,静态变量会保留上一次的值。
- 在
-
autoNum = autoNum * 2;
和staticNum = staticNum * 2;
- 这两行代码分别对
autoNum
和staticNum
进行操作。 - 对于
autoNum
,它的值乘以 2 后重新赋值给自身。由于autoNum
是自动变量,每次函数调用都会重新初始化,所以每次都是对初始值 5 进行操作后得到新值。 - 对于
staticNum
,同样将其值乘以 2。由于静态变量的特性,它会在上一次计算后的值基础上进行操作。
- 这两行代码分别对
-
printf("autoNum:%d,staticNum:%d\n", autoNum, staticNum);
- 使用
printf
函数输出两个变量的值。格式字符串中autoNum:%d,staticNum:%d
表示先输出autoNum
的值,再输出逗号和空格,然后输出staticNum
的值,最后换行。后面的参数列表中依次传入autoNum
和staticNum
的值。
- 使用
-
int main()
- 定义了程序的入口函数
main
,返回值为整数类型。
- 定义了程序的入口函数
-
printf("第一次调用:\n");
、doubleValue();
、printf("第二次调用:\n");
、doubleValue();
、printf("第三次调用:\n");
、doubleValue();
- 在
main
函数中,首先输出提示信息 “第一次调用:”,然后调用doubleValue
函数。接着输出提示信息 “第二次调用:”,再次调用doubleValue
函数。最后输出提示信息 “第三次调用:”,第三次调用doubleValue
函数。
- 在
-
return 0;
main
函数返回 0,表示程序正常结束。
三、代码执行结果预期
每次调用 doubleValue
函数时,autoNum
的值会是 10(5 * 2),因为它每次都会重新初始化。而 staticNum
的值会在第一次调用时为 10(5 * 2),第二次调用时为 20(10 * 2),第三次调用时为 40(20 * 2)。