王朝网络
分享
 
 
 

《The C Programming Language》读书笔记2

王朝c/c++·作者佚名  2006-01-30
宽屏版  字体: |||超大  

第二章:(本文首载于第二书店本人的暑假系列笔记)

本章的内容是学习编程中最基础东西,任何一门语言都会告诉你他支持那些数据类型、那些运算、有那些特点、以及有那些不完善的东西。学习这些东西相对来说是单调了点,麻烦了点,但是只有通过了这座迷宫,你才能就进入c这个神奇的领域。因此初学者的成功至少有一半来自“耐心”。呵呵,准备好了吗?

本章的内容还是非常简单的,但是作者的字里行间隐藏了很多重要的信息,不加注意就会从我们的眼皮低下溜了去,下面将一一列出以示强调。

第一.变量和常量。很多人对于他们的区别很模糊,个人认为他们的主要区别在于是否分配内存空间,换句话说,就是是否存在左值。左值是什么?在第二章的从头到尾好像没找到这个名词,呵呵,你可以在附录中关于变量的条目中找到他,其实就是变量的地址,变量一旦被定义,左值就被确定了,一直到他的生存期结束。我们通常说的变量的值是指变量的右值。这才是我们能操作的对象。根据这个理论,那么就不难知道其实被const修饰的对象不是常量,他有左值,但是这里有个小麻烦,在本章的开头写明了被const修饰的是常量(本章第二段有个()说明),我查看了原版,并没有这个补充说明,看来应该是译者的理解,在《c专家编程》中的一个例子证明了我的想法是正确的,例子如下:

#include “stdio.h”

#include “stdlib.h”

#define one 1

const int two = 2;

int main()

{

int ix = 1;

switch( ix )

{

case one: printf( "this is 1" );/*ok*/

break;

case two: printf( "this is 2" );/*error*/

}

system( "pause" );

return 0;

}

大家都知道,case后面只能跟常量表达式,因此被const修饰的变量不是常量,只是变量的右值一般不能改变罢了。另外你也可以从上面感觉出#define和const的区别。

第二.关于换码序列。这个更多地方叫转义字符,他们大多数是有一些特殊的功能的字符,在上篇笔记中你已经看到了他的一点威力,下面我们再看一段代码:

#include "stdio.h"

#include "string.h"

#include "stdlib.h"

int main()

{

int ix;

ix = strlen( "\0abc" );

printf( "this is %d\n", ix );

ix = strlen( "\007abc" );

printf( "this is %d\n", ix );

system( "pause" );

return 0;

}

你会发现,两个差不多的字符串长度完全不一样,什么回事呢?第一个我们可以理解:\0是字符串结束符,因此其后的任何东西都不能算字符串的内容,因此长度为0。但是第二个呢?我们查了换码序列表就知道‘\007’这个为一个字符,因此长度为4。这个时候问题来了,编译器为什么没把‘\007’理解为‘\0’‘0’‘7’呢?如果这样的话长度也将为0,我们又没人为的加分割符号,呵呵,显然这个和编译器的具体实现相关,凭我们现有知识无法弄明白这点,姑且留着,等待“悟“的一天吧,相信我,这绝对是一种享受。

第三,关于++运算符,在很多教材上都有个看起来很经典的题目,其代码如下:

#include "stdio.h"

#include "stdlib.h"

int main()

{

int ix, iy;

iy = 1;

ix = ( iy++ ) + ( iy++ ) + ( iy++ );

printf( "this is %d\n", ix );

iy = 1;

ix = ( ++iy ) + ( iy++ ) + ( iy++ );

printf( "this is %d\n", ix );

iy = 1;

ix = ( ++iy ) + ( ++iy ) + ( iy++ ) ;

printf( "this is %d\n", ix );

iy = 1;

ix = ( ++iy ) + ( ++iy ) + ( ++iy ) ;

printf( "this is %d\n", ix );

system( "pause" );

return 0;

}

呵呵,是不是很晕?这个本来无非为了说明先加后加的问题,这个地球人都知道,这里不加说明了,但是这样的程序本身就有很大的问题,编译器的运算并非一定是从左到右的(有些是按树的遍历来算的),因此你会发现不同的编译器结果会不一样,关于这个本章的结尾有很完整的解释,我就不再多说了,总之,这个测试本身就违背了语言的特性。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有