问答详情
源自:5-11 变量存储类别

关于这道题

为什么设置静态局部变量和外部变量?

能讲解一下这道题吗

提问者:看不清0 2015-08-23 08:33

个回答

  • onemoo
    2015-08-23 14:43:26
    已采纳

    函数中变量前加上static,这个叫局部静态变量,这个变量在整个程序中只有一份,在多次函数调用中可以保留它的值。

    你可以看到,在for循环中调用了5次fn函数,但每次x的值都不一样:第一次调用时x的值是1(就是定义的值),接着值被乘以2,成为2,打印了出来。在第二次调用时,前次的2被保留下来了,所以第二次输出了4。第三次输出了4*2=8......,因为实际上每次函数存取的x都是同一份,所以值才会被保留下来。

    如果在fn函数定义x时没有加上static,那么每一次调用fn时x的值都是1,最后打印出来的都是2。实际上每次调用时使用的x都是自己的那一个,所以值不能共享。



    而main函数中的那个并不是变量定义,那只是一句声明:声明了一个外部变量x。也就是告诉编译器“有一个变量叫x,但并没有定义在这里”,这样你就可以在代码中使用这个x(C要求所有符号在使用前必须声明)。随后编译器在这个代码中找到了x的定义(最后一行),所以前面那个x就当成是这个值为100的x了。

  • xiedukai
    2015-08-23 11:42:54

    顺便提醒一下,你那个 extern int x;定义放错位置了,应该放在int i;的前面定义,不然运行会出错的;

  • xiedukai
    2015-08-23 11:41:43

    静态变量就是他只能获取本函数里面的值,比如static int x = 1; 动态变量能寻找到其他函数乃至函数外,如extern int x; 但最后面有int x=100;所以这个x的值可以是100.