C语言中静态局部变量的问题

2025-01-08 09:38:06
推荐回答(5个)
回答1:

静态局部变量相当于全局变量(只是只有在这个函数中能访问,但是生命周期是和全局变量差不多的),函数退出之后变量还在,而且只在第一次进入的时候做初始化,以后会跳过初始化语句,保留原来的值(也就是说,如果item是static的,那么只有在第一次进入这个函数的时候会执行item=0,以后都不会执行。)。

回答2:

因为static的生命周期是要等到整个程序运行完才释放的,而且当他被赋值一次时,在定义的地方是不会再重新给他赋值的。。。所以当你输入的第一次88 88 88 55 有一个小于60 时 item 就被赋值为1了,之后不管你输入的是88 88 88 88 还是 99 99 99 99 之类的。。他都是 1 。
修改的方法是用以下的方法让item重新赋值(如下):
static int item;
item = 0 ;

又或者可以不用sum
直接写成:
if(str[1]<60||str[2]<60||str[3]<60||str[4]<60)
item++;
}
printf("%d\n",item); // 注意:要把static int item 写到while 循环的外面,不然这句会出错

回答3:

static 用修饰符来声明的变量叫静态变量。
这种变量和一般的变量不同。从程序开始到程序结束一直存在。
局部静态变量。是在函数内部声明的静态变量。
局部静态变量的值有一个特性,它会保存你操作的结果。
举个例子:
int test(int a)
{
static int sum = 5;
sum += a;
return sum;
}
当你第一次调用时 static int sum = 5;起作用
int a1 = test(2);// a1 = 7 同时 sum = 7
当你第二次调用时 static int sum = 5;不起作用 sum = 7
int a2 = test(2);// a2 = 9 sum = 9

这是因为用static声明的变量分配的地址不是在栈中。在完成第一次调用后,它仍然存在,并且有个值。第二次调用时,并不会再重新生成一个变量,还会使用上一次函数完成时的值。

回答4:

静态局部变量相当于全局变量,只是只有在这个函数中能访问,但是生命周期是和全局变量差不多的,函数退出之后变量还在,而且只在第一次进入的时候做初始化,以后会跳过初始化语句,保留原来的值。

回答5:

在函数内部static声明的变量,在第一次调用函数的时候进行初始化,此后对此函数的调用,都使用第一次初始化话时的变量,对函数内部来说就像是使用全局变量一样,但静态局部变量只对声明的函数可见。一般编写底层应用的时候用的比较多