zoukankan      html  css  js  c++  java
  • 关于变量初始化的分析

    1. 哪些变量需要初始化?

    要养成好的编程习惯,通常局部变量都需要初始化,static类型的局部变量除外。

    2. 为什么局部变量需要初始化?

    因为局部变量是从stack或heap上直接分配的空间,而stack或heap上的空间是被反复使用的。

    所以无法预知上一个时间点这块内存空间存了什么样的数据,这样有时可能会对程序的执行

    结果造成影响。

    3. 为什么static类型的局部变量或全局变量可以不用初始化?

    static类型的局部变量仍然是从全局数据区分配空间的,所以我们也可以将其理解成一种特殊的

    全局变量,这种特殊性体现在作用范围上,它的作用范围是某个函数体内或某个代码块内。

    程序员可以按需对全局变量进行初始化,如果不初始化全局变量,那因为RAM掉电信息丢失的特性,

    这些未初始化的全局变量都会被默认初始化为0。

    我在下面这篇博文中有简单提及到存储器空间布局,有兴趣的话可以做个参考。

    http://blog.csdn.net/boyxulin1986/article/details/11209265

    4. static局部变量有什么作用?

    所谓存在即合理,其优点是首先告诉编译器其是static类型的局部变量,所以必须要从全局数据区

    分配内存;同时它是一个局部变量,它的作用范围就会限定在某个局部范围之内,这样别人也就

    不会误用到。

    那你如果真的要在函数体外定义一个全局变量,当然也能达到同样的目的。

    5. 全局变量的使用?

    如果你的全局变量要在多处使用,甚至是具有跨文件跨模块的特性,那么建议将其打包成函数来使用:

    int get_value(void)
    {
        return g_value;
    }
    void set_value(int value)
    {
        g_value = value;
    }

    其好处是当程序错误时,有助于快速的定位到问题点。如果是在mulli-thread编程中,

    那还要考虑使用必要的保护机制(如mutex),防止可能出现的race condition。

    6. 局部变量的声明?

    曾几何时,我们在C编程中都会将所有的局部变量的声明放在函数的最前面。

    现代C语言已经支持随时随地在你需要时去声明一个局部变量,其好处是什么?

    之前在网上看到一句话:“当你盖房子时,是愿意将锤子放在自己的手边还是邻居的院子里呢?”,

    这种做法的好处就是当函数体较大时,可以提高代码的可读性(你不用在屏幕上来回翻页了)。

    当然,关于这一点是有可能会出现争论的地方,这里不评论其好坏。

    7. 为什么不能过多的使用全局变量?

    我们知道,在编程时会不可避免的要使用到全局变量。但是过多的全局变量会增大模块之间的耦合性,

    而耦合性增大了程序的可维护性以及可重用性就会降低。

    以上是目前本人对变量初始话一块的心得体会;

    如果其中有错误的地方,欢迎大家一起讨论。

  • 相关阅读:
    ASP.Net Core一个项目中如何支持多种身份认证方式
    c#正则表达式
    Newtonsoft.Json笔记 -JsonPath
    DotLiquid-介绍
    ASP.NET Core-请求频率限制(AspNetCoreRateLimit)
    使用dotnet-gcdump 查找耗内存的大对象【转】
    使用dotnet-dump 查找 .net core占CPU100%的原因【转】
    ADO.NET
    .NET Core-IServiceCollection扩展一个Replace方法
    SafeList-线程安全的List(c#)
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3310502.html
Copyright © 2011-2022 走看看