鱼C论坛

 找回密码
 立即注册
查看: 1251|回复: 4

[已解决]c语言中局部静态变量。

[复制链接]
发表于 2019-10-17 16:58:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大家好,楼主初学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,与书中静态局部变量在运行前只初始化一次不相符。
请教大家是我哪里理解错了呢?
最佳答案
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)                     ;
}
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)                     ;
}
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

多谢回复,但是我一直不明白你每次调用SUM,静态变量b的值会随着每次的调用而改变,为什么我的test每次调用,静态变量c一直不累加?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

静态局部变量不在堆栈里,编译时就已经初始化,函数test设计的目的就是为了测试静态变量c的值是否是只初始化一次,,,但是我一直不明白为什么C的值不累加。。还望指教。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

多谢,理解了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 15:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表