下面四个子函数的代码,起区别就是定义的变量的属性(是不是静态的)以及有没有初始化:
通过下面对代码的简单调试,可以简单的得出:
static int cnt = 0;他仅仅起的是一个初始化的作用,即我认为,在若干次执行test1()函数时,
static int cnt = 0; 只在第一次test1()函数被调用的时候初始化为0,当test1()第二次或更多次被调用时,cnt为保存的上一次的值。
对于非静态变量,若不初始化(见test4()函数),它将会是一个随机的数字。在本程序中未被初始化的静态变量(见test3()函数)值为0,但因为用静态变量就是为了要用它的记忆功能,所以最好初始化一下。
-
#include <string.h>
-
#include <stdio.h>
-
-
void test1(void)
-
{
-
static int cnt = 0; //静态变量,初始化为0
-
int i;
-
printf("-------------test1-------------\n");
-
printf("cnt1_1 = %d\n",cnt);
-
for (i = 0; i < 2; i++)
-
{
-
cnt++;
-
}
-
printf("cnt1_2 = %d\n",cnt);
-
printf("\n");
-
}
-
-
void test2(void)
-
{
-
int cnt = 0; //非静态变量,初始化为0
-
int i;
-
printf("-------------test2-------------\n");
-
printf("cnt2_1 = %d\n",cnt);
-
for (i = 0; i < 2; i++)
-
{
-
cnt++;
-
}
-
printf("cnt2_2 = %d\n",cnt);
-
printf("\n");
-
}
-
-
void test3(void)
-
{
-
static int cnt; //静态变量,未初始化
-
int i;
-
printf("-------------test3-------------\n");
-
printf("cnt3_1 = %d\n",cnt);
-
for (i = 0; i < 2; i++)
-
{
-
cnt++;
-
}
-
printf("cnt3_2 = %d\n",cnt);
-
printf("\n");
-
}
-
-
void test4(void)
-
{
-
int cnt; //非静态变量,未初始化
-
int i;
-
printf("-------------test4-------------\n");
-
printf("cnt4_1 = %d\n",cnt);
-
for (i = 0; i < 2; i++)
-
{
-
cnt++;
-
}
-
printf("cnt4_2 = %d\n",cnt);
-
printf("\n");
-
}
-
-
int main()
-
{
-
int i;
-
for(i = 0; i < 4; i++)
-
{
-
test1();
-
test2();
-
test3();
-
test4();
-
}
-
return 0;
-
}
阅读(7078) | 评论(5) | 转发(1) |