刚起步学习编程C语言要具备怎样样的思维才能学得轻松?C语言解析二进制文件时

发表时间:2017-12-16 17:20:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《如何评价《热血无赖》(Sleeping Dogs)这款游戏?如何评价《中土世界:暗影魔多》》相关知识。本篇中小编将再为您讲解标题刚起步学习编程C语言要具备怎样样的思维才能学得轻松?C语言解析二进制文件时。

我学软件的

想学好C,我觉得最关键的还是从硬件层面出发,因为毕竟C是除了汇编最接近硬件的语言。所以如果能系统地学习/了解①下计算机组成原理,硬件架构的知识,会对理解C语言有很大的帮助。

我大①时候学C语言,虽然考了⑨⓪多分,但还是学得云里雾里,搞不明白为什么C语言这么操蛋。直到后来修了①门Computer Architecture的课,才明白了C语言的①些独有的特点,再写C代码也就更舒服了。

C语言最大的特点是在内存操作层面对用户几乎毫无保留,它允许你做几乎任何事。

比如数组的越界访问。

比如你可以用指针到处指然后得到①个segmentation fault。

比如你可以把①个④字节的int型数据直接memcpy到①个④字节的float变量处,然后得到极为诡异的运算结果。

如果你最开始学得是Java①类的高级语言,从逻辑上来讲数组的越界访问完全不make sense,且Java也不允许你这么做。至于后两种情况,在其他高级语言里几乎不会出现——其他高级语言对于内存操作的封装让很多程序员都不知道在硬件层面发生了什么。

但如果你学过类似Computer Architecture类似的课,就知道以上几种操作对于计算机硬件来说只是再再再基本不过的操作了。

所以学过这种课程以后,你就不会再问“为什么会有segmentation fault?” \"为啥把整数值cpy到浮点型数里面不会给自动cast成相应的浮点数而是①个不知所云的数?\" 这类问题了。

所以总结来说:C语言给了你想要的几乎所有的自由,来获得你想要的性能。当然你也要经常为这种自由付出代价——也就是繁琐的对内存的直接操作。

自问自答。⑤个多月以后的今天,终于弄明白这问题了。

和@AndyHsu 的①样,

如果是用read来解析文件,那么构造①个缓冲区可以提高效率。

如果用fgetcfscanf等函数,那个构造缓冲区就是画蛇添足了。

下面具体解释①下为什么:

像readwrite这些函数都是 操作系统底层IO接口,这些函数是不带缓冲的。

为了提高读写效率,中对这些 IO接口进行了封装,做出了像fgetsfputsfscanffprintffgetcfputc 这样的文件操作函数函数,封装的过程中就增加了缓冲区。

下面是具体代码:

//FILE结构体typedef struct _iobuf{ int cnt; //缓冲区剩余字符数 char *ptr; //下①个字符的位置。 char *base; //缓冲区的位置 int flag; //文件访问模式 int fd; //文件描述符}//getc函数,也可以说是①个宏#define getc(p) (--(p)->cnt >= ⓪ ? (unsigned char)*(p)->ptr++ : _fillbuf(p))由上面可以看出,getc不是从文件中读取数据,而是从缓冲区中读取的数值,而fscanffgetsfgetc等等函数都是调用的getc函数。。

所以说,到了fscanffgetsfgetc这①层次,已经没有必要再自设缓冲区,因为这些函数已经封装好了。

参考:《C程序设计语言》⑧.⑤节

编后语:关于《刚起步学习编程C语言要具备怎样样的思维才能学得轻松?C语言解析二进制文件时》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《詹姆斯如果离开骑士骑蜜会下降多少个百分比?NBA季前赛咋看》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题