C语言中的一些事

题记:看完《C语言深度剖析》这本书已经很久了,虽然的看到的并不是最终的出版书籍,但是,在看的时候仍旧是有一种醍醐灌顶的感觉,似乎它讲到的都是自己 并不知道。也许,在看完这本书后,我并不能说我出来又学到了什么知识,即使我说出来,也许你会说那些是些基础的东西,有点不上台面的。但是,我认为这些才 是我们真正应该注意的,它会让我们写程序的时候少犯很多错误。一些不是语法和逻辑造成的错误。

我学习C语言,按照时间算的话,到现在已经 有两年时间了,两年时间,很多时候都是在抱着课本看,后来感觉C语言就是这些东西吗?似乎有点少,没有多大的用处。但是,在网上看见别人对C的评价,总有 点感觉C有点名不符其实。后来才发现自己是那么的可笑。就如同一个井底之蛙,不知世界之大。

后来,在暑假的时候看错《C语言也能办大事》 视屏教程,了解一些c的windows编程,看到了C语言的另一面,也就是一样一个改变,为我打开了C的另一扇大门,让我放开了眼界,去看更深层次的C。 然后疯狂的在网上找了很多C进阶的书籍。在这时候,我才感觉,自己学的c真的是有点浅了,根本没有真正的学到C。而《C语言深度剖析》告诉了我很多C语言 中看似细枝末节,但是又不能忽视的东西。可是,已经看完好久了,在此就算是做一些回顾总结吧。

要说一门编程语言,其实没有那么明确、完全 的一个准则,很多东西都是因为编译器、系统的不同而略有不同的。比如,一个int型数字占几个字节?所以很多东西,在使用以前都要在自己的机子上测试一 下。当我们看到了int,那么只要学过C或者其他编程语言,就应该知道,它是一个保留字,或者叫关键字。学习一门编程语言,它有多少保留字,每一个保留字 的用途,这些我们都要搞清楚,这些都是些一个程序的基础。也许你从一开始就不注意这些,且刚开始这方面的很多东西不会对你的程序有任何影响,那么有一天你 真的用到的时候,你是否能够想到是因为这些事情而引起的错误呢??从小事、基础做起,也许这就是学习一门编程语言的要点。

我们来看几个关 键词,int、double这一类的都是我们常用的,都是我们经常用的,暂时我们只需要测试一下它们在你用的编译环境中的长度应该就够了。那么,我们在看 看,register、enum、union等等一些我们不常用的关键字呢?你否能够记得这些关键字的用途?我想很多人都不知道完整的C语言32个关键 字。不要吃惊,在开始我同样没有意识到,C语言会有这么多的关键字,但是当你去看看自己课本,你真的会找到这32个关键字,虽然很多你都没有使用过。

如 果你说你是因为那些不常用或者就没有用过,所以,不知道、不熟悉。那么,你在这之前是否知道sizeof同样是一个关键字呢?我想肯定会有一些人把它当做 库函数了!那么,去测试一下,sizeof(int)、sizeof(i)、sizeof  int、sizeof  i以及sizeof (int) *p这些表示方式对不对呢,对又是什么意思,不对是因为什么呢?如果,你知道了这些,你就再也不会把它当函数了,也不会仅仅是背下来了,这是一个关键字, 而是真正的理解。

如果你想学真正的C语言,那么其他的关键字,也还是要多多了解、学习的!

关键字是既定的标识符,那么, 我们不可避免的会有自己定义的变量。对于变量、函数的定义命名,刚开始也也许就会用a、b、fun之类的东西。我们先不讨论这种方式的好坏,举个现实中的 例子:作为学生,每个人都有自己的名字(当然现实中会有重名的,这点不好),也会有自己的学号,你可以很容易的记住一群人的名字,但是,也许你永远不会记 住他们的学号。那么,我感觉变量函数的命名也是类似的。我们可以通过一个变量的名字,知道它的类型、知道它的用途,就像一个名字中的姓、名一样。

刚 开始写程序,我们每个人都不会写注释,因为麻烦,且感觉没有必要。如果你的程序只有几百行,可能注释的必要确实不大。但是,你能记住一个几千几万行的程序 中的每一句的作用?即使你的记忆力超强可以记住,那么,你可以读懂一个没有注释的几千行的程序?那么,在即使可以,你要花多久的时间呢?

所以,还是从一开始就学着写一些注释吧,即使你的注释可能一点用处没有、或许显的比你的程序还长。让我们来看看注释的一些事情吧。

注 释,一般我们会有两种方式(/* ……*/、//……),这个没有什么可以讲的,只要在写的时候注意写一些重要的、特别的东西就好了,但是真的是这样子就行了??可能还有一个我们没有想到 的地方,那就是编译器是怎么来处理这些注释的呢?真的仅仅是把注释删掉,仅编译代码?可能不是那么的简单。在编译的时候,确实会将注释“删除”,但是,更 准确的是替换,将一处注释替换成一个空格。你说这样一个空格对程序没有影响的。但是,我想说的是,如果不知道这一点,你能确定“in/*……*/t  i”是否正确呢?

事实上,注释远远没有上边说的这么简单。如果没有在编译器上编译,你是否会准确的说出char *p = “asdasds  //dasdad”对不对呢?y = x/*p呢?又或者
#defi/
ne abc

再来个比较综合的:

cha/
r *p = "这是一个//合法的字//
n符串"

额……现在我自己也有点晕了,估计正常人是不会这么写代码的。但是,我们不光要自己写代码,还是要看别人的代码,所以,当你学会了这些,碰见变态的人你还会怕吗?

我 曾经一直分不清楚,i++和++i的区别。但是,当我看见++i+++i+++i的时候,我就真的晕了,竟然还有这种东西存在!!!好吧,C语言不是我们 创造的,那就不要抱怨这个了。C语言中有这样一个毛病,贪心啊,就是没有一个符号会包含尽可能的多的字符,就是编译器从左到右一个个字符的读入,如果字符 能组成一个符号,就继续读入下一个,知道不能组成符号。那么,现在分析一下,i+++i是什么意思,然后再去分析开始的那个吧。

写完这 些,我突然想起来:/*…………*/……*/会是什么样子?可能会跟你想的优点差别,如果用这种方法注释掉一段代码的做法有时候不是很好的,那么,我们来 看看预处理吧。呵呵呵,我不是写作的大家,但是,写的很多话是也是有目的的。也许你已经猜到了,我的意思是预处理和注释代码有关,额……这个是真的吗?也 许这样不能算是注释代码!

在很多时候,我们为了验证程序中间某一步的处理结果是否正确,往往会选择加一个printf输出它,那么,实际这写输出我们在程序完成时是不想要的。你会选择一个一个的删掉?这样子似乎有点慢!且往往会漏掉、或者多删掉了一些。

那么,我们看一个不常用的预处理代码:
#ifdef  标识符
程序1
#else
程序2
#endif

哈 哈,有了这个你就不会再这些printf而烦恼了。没有章法的写作啊!插两句吧!printf之类的输出命令,有人是这样子形容的,他们即使天使,更是恶 魔!!!当你一个程序用输出命令来验证结果的时候,就会少去考虑很多为什么,就不会考虑这个结果为什么对,为什么不对。仅仅是想到了,这个运算结果与预期 的一致,OK,这是正确的!但是,真的是正确的吗?建议还是少用一些输出来验证吧,真正的程序是F10、F11一步步调试的,多多考虑它们的原理,学会去 看看数据在内存中的变化。

下面好像要说说指针了,指针是C的灵魂,不应该来概括的说的,所以,还是建议细细的看看《C和指针》吧,你会把 你认为最难的指针看”透“的。当我说"指针和数组是相似的,可以通用",但是得到的答复是否定的。而对于C引以为傲的内存管理和指针是紧密联系的。我不会 做出什么概括的说明。因为自己本身就学的不好。

后记:在看完这本书之后,我只记的这么多东西,闲来无事做一下总结吧,本文仅仅是些了一些 十分概括的东西,更甚的说,我只是写了篇满是问题的总结,其中真正的东西是需要你自己去尝试才会有结果的。如果,想知道答案,那就去看看书或者自己在机器 上疯狂的敲写、调试代码吧!本文为原创,如有错误,请给予指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值