zoukankan      html  css  js  c++  java
  • 全局变量和局部变量

    #include <stdio.h>
    
    //int b;
    
    int add ( int a  ) {
            return a + b ;
    }
    
    int b = 20 ;
    
    int sub ( int a ) {
            return a - b ;
    }
    
    int main (void) {
    
            printf("add :%d
    ", add( 3 ));
    
            printf("sub :%d
    ", sub(40));
    
            return 0;
    }

    什么是全局变量 ?定义在函数外面的变量,如 上面的 b ,这个例子中有两个点需要注意:

    (1) 如果把最前面的  int b 注释了,虽然b是全局的,但是编译仍然报错,在编译到 add函数的时候提示 变量 b  未定义;

    我就纳闷儿了,b既然是全局变量,在add中为什么不能用呢? 同样的代码用js 来重写一下,运行正常;

    现在做点改变 ,前面的int b 还是注释了的,然后我把 add函数的定义和 int b = 20 换一下先后顺序,编译正常;

    int b = 20 ;
    
    int add ( int a  ) {
            return a + b ;
    }

    原因处在哪里?  首选 用js 之所以可以顺利通过,是因为js的动态语言特性,在需要调用函数的时候才回去找这个全局变量存不存在,而静态编译语言在编译的时候

    就会去找这个变量存在不存在, 起初,在定义add函数前  没有关于b的定义或声明,所以此时add函数体内的b是未定义的,解决办法就是,要么把b的定义放到add函数定义之前,

    要么在add定义后定义b,但是要在add定义前声明有这么一个全局变量,add函数在编译的时候才知道取找b;

    (2) 全局变量和局部变量定以后如果没有初始化一个值,结果是不一样的,全局变量在定义后如果没有初始化,系统会自动把值填充为0,而局部

    变量不会填充,比如定义 一个局部变量c  但是没有初始化,那么c的值就是c所在内存中的一个随机值,这个值可能是以前的程序在这块内存运行后残留的值,局部

    变量如果不初始化,会带来意想不到的结果;

  • 相关阅读:
    项目上线之期初数据调整
    系统升级时,数据库脚本执行注意事项,血的教训
    数据精度问题的处理
    系统发布说明文档
    SQLServer中数据库文件的存放方式,文件和文件组
    数据库的持续集成和版本控制
    SQL Server 远程链接服务器详细配置【转载】
    批处理中的IF ERRORLEVEL
    asp.net用url重写URLReWriter实现任意二级域名
    关于excel导入access问题(已解决)
  • 原文地址:https://www.cnblogs.com/codeAB/p/6514886.html
Copyright © 2011-2022 走看看