c语言中局部静态变量。
大家好,楼主初学C语言,有些问题还望过来人不吝指教,先谢谢了。#include<stdio.h>
int test(int a, int b)
{
static int c;
c=a+b;
return c;
}
void main()
{
int i,j;
for(i=0;i<3;++i)
j=test(1,1);
printf("%d",j);
}
第一个函数test中定义了一个静态局部变量c,按说在多次调用test时,c的值是只初始化一次,以后不会再初始化。
但我用VS2010编译运行,结果一直是2,也就是说main函数中每次调用test,静态变量c每次都被初始化为0,与书中静态局部变量在运行前只初始化一次不相符。
请教大家是我哪里理解错了呢? 定义静态变量的时候可以给这个变量赋初值,静态变量赋初值的操作是在代码编译的时候实施的,不会在调用函数的时候实施。
你定义的 test() 函数完全没有用到静态变量的特性,看看我设计的 sum() 函数,用途是计算累加:
#include <stdio.h>
int sum(int a)
{
static int b = 0 ;
b += a ;
return b ;
}
int main(void)
{
int d , k ;
for(k = 0 ; k < 100 ; k ++) d = sum(k + 1) ;
printf("d = %d\n" , d) ;
}
jackz007 发表于 2019-10-17 17:13
定义静态变量的时候可以给这个变量赋初值,静态变量赋初值的操作是在代码编译的时候实施的,不会在 ...
多谢回复,但是我一直不明白你每次调用SUM,静态变量b的值会随着每次的调用而改变,为什么我的test每次调用,静态变量c一直不累加? jackz007 发表于 2019-10-17 17:13
定义静态变量的时候可以给这个变量赋初值,静态变量赋初值的操作是在代码编译的时候实施的,不会在 ...
静态局部变量不在堆栈里,编译时就已经初始化,函数test设计的目的就是为了测试静态变量c的值是否是只初始化一次,,,但是我一直不明白为什么C的值不累加。。还望指教。 jackz007 发表于 2019-10-17 17:13
定义静态变量的时候可以给这个变量赋初值,静态变量赋初值的操作是在代码编译的时候实施的,不会在 ...
多谢,理解了
页:
[1]