zoukankan      html  css  js  c++  java
  • 关于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初始化,那么两者意义相同,但显然多打一个空格是没什么意义的。

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

  • 相关阅读:
    #include "stdafx.h" 错误?
    扩频技术
    求数组中只出现一次的数字(算法)
    1.3一摞烙饼的排序
    嵌套类
    企业级邮件服务软件推荐
    关于Linq To Sql中Detach方法和一个公共基类
    asp.net(c#) 将dbf转换为xls或wps,并将数据的列名改成中文;并判断本机是否安装office2003,2007和wps2007,2010
    一句代码解决IE8兼容问题(兼容性视图)
    asp.net(C#)套用模板操作Excel
  • 原文地址:https://www.cnblogs.com/tonychan/p/2035430.html
Copyright © 2011-2022 走看看