回 帖 发 新 帖 刷新版面

主题:关于static变量问题

#include<stdio.h>
static int j;
void fun1(void)
{
    static int i = 0;
    i ++;
    printf("i=%d",i);
}
void fun2(void)
{
    j = 0;
    j++;
    printf("i=%d\n",i);
}
intmain()
{
    for(k=0; k<10; k++)
    {
        fun1();
        fun2();printf("*******************\n");
    }
    return 0;

运行结果:
i=1j=1
********************
i=2j=1
********************
i=3j=1
********************
i=4j=1
********************
i=5j=1
********************
i=6j=1
********************
i=7j=1
********************
i=8j=1
********************
i=9j=1
********************
i=10j=1
********************

j一直为1我是知道的,但请问为什么i一直自增呢?

回复列表 (共6个回复)

沙发

static int i = 0;只执行一次,之后再进函数这句话就是浮云,根本可以认为它不存在了。
剩下的只有i++;

板凳


i只在fun1中起作用,跳出fun1就不起作用啦

3 楼

你的程序好多错啊,请问你有输出j的值吗?

在fun1函数中语句static int i = 0;的意思是定义一个静态存储的整形变量i,并且初始化值为0
这条语句只执行一次,多次调用函数时这条语句不执行了,如果在不懂的话就是函数fun1里已经定义过i了,再次执行的时候不需要在定义i了!另外主函数里没有定义k,fun2里应该输出j

4 楼


k是如何来的。

5 楼

看看c语言书,静态变量存储在内存的静态区,同名变量只定义一次

6 楼


static int j;
void fun1(void)
{
    static int i = 0;


////////////////
 i, j 在内存属性上一样,都在静态内存区。在程序结束前,两个变量都一直存在。
因此i 会不断的递增。
 static int i = 0;//  赋0值 操作只执行了一次

只不访问范围不一样,
这里的j , 在本文件内可以全局访问。
 而 i ,   只能在函数内部访问。

我来回复

您尚未登录,请登录后再回复。点此登录或注册