• 关于C语言变量初始化的两个问题的笔记


            4年的大学生活即将结束,实习期间重拾了不重视很久的C语言。看着程序,OMG,竟然发现问题不少。好了,那么仅以此篇BLOG作为我在博客园上的处女作,记录一下这些傻傻的、本应该清楚的问题。

      公司里的程序使用PRO* C编写后台server。自从阅读这些程序以来,有个问题一直困惑着我。PRO* C(在此鄙视一下PRO* C,虽说一名优秀的程序员会更喜欢使用记事本或者notepad之类的文本编辑器写程序,但对于初级程序员来说,用PRO* C这种根本找不到IDE的C语言变种写程序的感觉简直糟糕透顶,编程效率实在太差了,而且由于没有基本的查错功能,因此也无法避免笔误!!!)是在EXEC SQL BEGIN DECLARE SECTION和EXEC SQL END DECLARE SECTION 中对后面SQL语句中的变量进行初始化的。在读程序的过程中经常可以看到诸如一下两种不同的申明(该死的上任程序员们一定没交流好):

    1)int doFlag = 0; 与 int doFlag;

    2)char value[3] = “”;与char value[3] = “ “;

    那么到底他们之间的区别是什么呢?

            首先对于1)来说,有一个局部变量与全局变量的前提,局部变量仅在自己的作用周期内可见,而全局变量在整个程序周期内均可见。“全局变量的内存分配是静态的,位于PE文件在数据区,在main()前由C、C++运行期函数初始化,如果没有初值,会被初始化为0。局部变量的内存分配是动态的,位于线程堆栈中。如果没有初始化的,初值视当前内存内的值而定。”【引号内引用CSDN cwanter的原话】总结下来,只有当变量申明为全局变量的时候,int doFlag才会被默认的置为0,而当变量为局部变量的时候, doFlag为未知值,具体要看被分配内存的值为多少。

            第二,对于2)来说,value被赋予了3个字节(这里有个问题,3个字节的内存地址是连续的吗?待解决),char value[3] = “”意味着每个字节被赋予0x00,而

    char value[3] =“ “则意味着三个字节分别被分配为0x20 0x00 0x00。如果仅仅是对value初始化,那么两者意义相同,但显然多打一个空格是没什么意义的。

           以上这些解释只是自己上网查找询问得出,如果有错误还请大家指明,共同进步;)

  • 相关阅读:
    CSS 控制table 滑动及调整列宽等问题总结
    Java读取properties文件
    水晶报表打印
    C# 运行时序列化
    C#attribute-----------初级
    c# 单元测试工程如何取得当前项目路径
    C# 字段、属性、成员变量
    水晶报表主子报表分页问题
    从0打卡leetcode之day 3 -- 最大子序列和
    从零打卡leetcode之day 2---两数相加
  • 原文地址:https://www.cnblogs.com/tonychan/p/2035430.html
Copyright © 2020-2023  润新知