读谭师傅的书(8) 读谭师傅的书(10)
Mar 30

前面学到了第三章第3.4节。现在来学第3.5节,《字符型数据》。这一节谭师傅暴露出来的最大问题,就一句话,他不明白字符常量的类型是int。此节出现种种奇谈怪论,下面一一道来。

1、谭师傅教导我们说,“字符型变量用来存放字符常量“,并且举例说,“ char c1; c1=’a'; ”。事实上,’a'是一个int,应当用int c1 = ‘a’才是正确的做法。

2、谭师傅又一次给出了强悍的谭氏标准:“所有编译系统中都规定以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节“。事实上,ANSI C只规定了字符型的最大、最小值。

3、谭师傅又花了整整一小节来说明对字符也可以像对整数一样进行算术运算。如果谭师傅把字符型也归到整型一类,不早就万事大吉了吗?

4、谭师傅说,“应注意字符数据只占一个字节,它只能存放0~255范围的数据“。一句话两处错。字符数据的大小C标准只有最小值规定,在所有系统中都能保证的取值范围也只有0~127。

5、谭师傅给出一个用字符变量做算术运算的例子,把一个字符变量减去32后就从小写字母得到大写字母。可惜的是,标准C并不保证小写字母和大写字母之前相差32,甚至都不保证字母表是以连续的整数来表示。所以这又是一个不可移植的C程序的范例。

6、谭师傅说,char c = “a”这样的语句是”错误的“,因为“不能把一个字符串常量赋给一个字符变量“。我不知道师傅这里“错误的”是什么意思,因为这样的语句是可以编译通过的(尽管有警告),因此语法上是正确的。这个语句也没有把什么“字符串常量”赋给变量,而是把这个字符串的首个字符地址赋给变量 。

7、谭师傅语重心长地说,“有些人不能理解:’a'和”a”究竟有什么区别“。我看,这只怕是要归功于谭师傅自己。如果讲清楚了’a'是int,”a”是数组,那还有什么不好理解?

好了,第3.5节就学习到这里,下次继续

“读谭师傅的书(9)”有5篇评论

  1. Says:

    eng大兄弟 别再浪费时间了

    基本上俺认为如果一个人还正常的话,当他/她试过谭的例子后就该撤了。如果还执迷不悟那也就不可救药了。

    以后再面试中国学生,得加上3个问题
    if read C lang book;
    if read 谭师傅’s book;
    Please give your review

  2. Says:

    这个留言好像不支持开头的空格。自动把缩进删了

  3. ronaldfree Says:

    我不同意楼上的观点。对高手来说,可能谭的书不值一提,可像我这样以谭的书为教材完全通过自学的人来说,楼上的文章就是一场及时雨,否则我们这些人就会在谭的书里面越陷越深最终不可药救。

  4. supernova Says:

    居然还在写,eng老兄够有耐心的。

  5. 穆扬 Says:

    “他不明白字符常量的类型是int”
    的确
    那个printf(“%d”,’a');解释的那个笨那个牵强啊
    但却是错的

发表评论

CAPTCHA Image
*