重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
如果外部变量不在文件的开头定义,其有效的作用范围只能从定义点到文件结束。如果在定义点之前的函数想引用该外部变量,则应该在应用之前用关键字extern对该变量作‘外部变量声明’。表示该变量是一个已经定义了的外部变量。有了此声明,就可以从声明处起,合法的调用该外部变量。
为东西湖等地区用户提供了全套网页设计制作服务,及东西湖网站建设行业解决方案。主营业务为成都网站设计、网站制作、东西湖网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
函数定义所谓“全局变量”的唯一方式就是把变量声明为static。static修饰的变量只会在函数第一次被调用时被初始化一次,并且超出函数作用域后不会被销毁。但其可见性仍然限于函数作用域内,而非全局。
显然提问者没有搞清楚 函数 声明和定义 这两个概念
第一行void abc(void); 是声明,不是定义,因为没有函数体,只是告诉Main函数,你要调用的abc函数是有的,定义在后面
Main函数中的abc函数是调用,调用当然可以多次使用,函数的作用也在于此,一次定义,多次调用,体现代码复用的好处
最后void abc(void){ …… } 到结束,是定义了,说明函数干什么的
ky 写 abc函数里 是推荐的方式,成为局部变量,函数调用完后,ky可被系统释放内存
ky不能写在Main函数里,abc将无法访问其他代码块(花括号内)的局部变量
ky可以写在最外面,即不在任何代码块内,且要写最顶行(建议),这样后续的函数都可以访问该(全局)变量,但一般建议不要过多使用全局变量
可以认为是局部变量,而且只在函数调用范围内有效 实际上函数的参数部分,是由系统在堆栈中临时申请的空间并存放参数数值的临时变量,函数返回后会同函数中申请的非静态变量一起被释放。
静态变量,特点就是只初始化一次。所以在这里b是只定义一次的。
于是
1 会占用,但是很少。 和全局变量定义差不多
2 没有,因为不存在多次定义,只定义了一次。
3 除了生命周期,最大的差别就是作用域了。
局部变量,只能在函数内访问,而全局变量就是谁都能访问,这样很容易出现混乱,尤其是多线程的情况下。
除此外,非静态的局部变量,在函数退出后内存就释放了,如果所有变量都定义成全局的,那明显是对内存的一种浪费。