hiyuc 发表于 2019-10-17 16:58:29

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,与书中静态局部变量在运行前只初始化一次不相符。
请教大家是我哪里理解错了呢?

jackz007 发表于 2019-10-17 17:13:52

      定义静态变量的时候可以给这个变量赋初值,静态变量赋初值的操作是在代码编译的时候实施的,不会在调用函数的时候实施。

      你定义的 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)                     ;
}

      

hiyuc 发表于 2019-10-17 17:25:34

jackz007 发表于 2019-10-17 17:13
定义静态变量的时候可以给这个变量赋初值,静态变量赋初值的操作是在代码编译的时候实施的,不会在 ...

多谢回复,但是我一直不明白你每次调用SUM,静态变量b的值会随着每次的调用而改变,为什么我的test每次调用,静态变量c一直不累加?

hiyuc 发表于 2019-10-17 17:33:14

jackz007 发表于 2019-10-17 17:13
定义静态变量的时候可以给这个变量赋初值,静态变量赋初值的操作是在代码编译的时候实施的,不会在 ...

静态局部变量不在堆栈里,编译时就已经初始化,函数test设计的目的就是为了测试静态变量c的值是否是只初始化一次,,,但是我一直不明白为什么C的值不累加。。还望指教。

hiyuc 发表于 2019-10-17 17:36:15

jackz007 发表于 2019-10-17 17:13
定义静态变量的时候可以给这个变量赋初值,静态变量赋初值的操作是在代码编译的时候实施的,不会在 ...

多谢,理解了
页: [1]
查看完整版本: c语言中局部静态变量。