变量初始化而引发的思考

变量初始化而引发的思考

    今天(5-26)在写一个小程序《更该文件修改时间》,期间用到了SYSTEMTIME这个结构体,然后通过SystemTimeToFileTime和SetFileTime去实现,很简单。程序编译链接都很正常,但是就是没有把时间修改过来,也没有任何提示,以为是对SYSTEMTIME赋值出现问题,于是用GetSystemTime获取系统时间进行更改尝试,没有问题,那问题出在哪儿呢?调试。。。也没有发现问题,纠结了好久,上网搜解决方法,基本都是类似写法:
		SYSTEMTIME systime;
		systime.wYear = m_date.GetYear();
		systime.wMonth = m_date.GetMonth();
		systime.wDay = m_date.GetDay();
		systime.wHour = m_time.GetHour();
		systime.wMinute = m_time.GetMinute();
		systime.wSecond = m_time.GetSecond();

没有什么错误,但是为什么不能实现时间的更改呢?经过反复调试,最后发现变量systime没有分配内存(即没有初始化),后来加上

ZeroMemory(&systime,sizeof(SYSTEMTIME));

问题解决了。。。

    其实不管申明变量或者对象都要进行初始化,这是习惯问题也是基础问题,尤其是结构体或指针对象,而对于基本的数据类型(int、float、double、bool、byte、short、char、long、long double等)系统会自动地给你分配一块空间或者默认就有初值。就像我们都知道去实现功能而忽略了程序自身的原理。举个简单的例子:小孩子不是一生下来就会走路,你得教他,但当他会走路以后,可自己鞋带开了自己根本不知道去系,因为他不知道鞋带对于他走路意味着什么。当他连系鞋带也毁了以后,他就可以跑了,因为他走的技能(原理)明白了。这就像我们声明一个变量而没有初始化一样,我们以为这样对于我们实现功能是没有影响的(对的),但根本不知道可能就是因为某个变量没有初始化而导致整个程序运行出现bug,你却只能看到表面现象(功能都实现了)。可是当我们编写一个很大的程序或者一个系统时,可能就是因为一个变量没有初始化,导致它使用了其他函数或者对象刚释放的内存空间而产生巨大错误,这种错误会让你头疼好长时间,甚至花上好几个月去调试。我们好多人都是直接去网上当一份源码,然后放到自己的程序里跑出功能来,这样永远脱离不了别人给你的枷锁。我们要的是明白原理以后,抛开别人的枷锁,学会自己“系鞋带”,放开自己跑。
    所以我们在使用学习的时候要弄明白原理,它为什么那样做?就像我们每天都在访问www.baidu.com一样,这个叫域名,名字谁都懂,那什么叫域呢?我们读大学,好多人说大学什么都没有学到,老师上课什么实质性内容都没有。举一个简单的例子,矩阵相乘,如果你连矩阵都不懂,而老师也没有讲,那你听课肯定会大打折扣,所以就会出现大学老师讲课什么实质性内容都没有的结果。大学老师不是我们中学的老师,他们授课是在我们有一定基础的基础上展开的,所以别人懂你不懂的就是你自己的问题了。大学课堂给不了我们多少知识,但是我们为什么还要读大学,因为我们需要那种环境和氛围,大学的图书馆是我们最佳的学习的场所,所以不会的都可以在那里查到,所以你感兴趣的点都可以在里面找到相关方面的书籍。
    原理很重要,好多内容我也在回头补漏。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值