八月 7
很不幸,也不知道因为什么又感冒了,鼻涕不时的跑出来影响我呼吸的节拍。浑身疼到骨头里,脑子很沉,几乎趴下就睡。还好4章内容昨天看了大半,否则今天怕是没有动力完成了。很重要的反映出来一点,当日事当日毕,将来不一定遇到什么情况,如果连续因为特殊情况出现,可能拖下去会拉下到计划彻底失败的程度。有的时候需要一种强行机制保证高优先级事务的运行。当然读书算不上高优先级,感冒还没到很严重,要真是发烧,鬼才去看书。不过这次读书对我很重要,一个是强迫自己养成每天读书得习惯,一个是首先选择CppPrimer是想把自己得Cpp基础彻底牢固一下,免得影响将来可能得提高需求。这本书尽快得读完以后还有更重要得书要仔细研读。

四章,很“底层”,这些东西都是在做底层得时候会用到得。而在普通编程层面,这些东西除了指针还不能舍弃外,其他得都不被建议使用。当然在指针不是必要得时候,我们也尽量不去用他。指针得灵活有的时候带来得却是灾难。

同样得,在这些熟悉得内容里面一样找到了一些需要提请自己加强注意得地方:

index type that used to array should be size_t.

(include in cstddef)
我真的不知道有多少人真的这么做了,至少在我周围得人很少做到这一点,在以前得章节也提到这个问题,需要再次注意。

Define two or more pointers in a single definition we must repeat the * symbol on each identifier.

OK,我见过很多犯这种错误得人,自己虽然没在这里犯错误,但是并不是头脑中有这个概念,只是习惯。(当然正确得习惯比头脑中得概念更有效)强化一下,在习惯得基础上加强理念。

//p1 is a pointer to string, while p2 is a string
String*  p1, p2; 
//this is the way will not lead to error.
String   *p1,  *p2;

 

Avoid Uninitialized Pointers.

上一条是习惯是对的,道理上没有明确。这个则是道理上明了,习惯上却做不到。最近还犯过这样的错误,我做的缓冲区管理类里面,构造函数没有把缓冲区尾指针初始化为NULL,于是那指针随意的指向了一个地址,导致缓冲区偶尔工作不正常。而且修改这个错误需要trace很多遍才watch到。必须养成定义指针的时候一定跟上初始化的习惯。

Differences between references and pointers: 1.reference must not be defined without initializing; 2. reference assigning changes the object that the reference bound, while pointer assigning rebinds the object the pointer points to .

精彩的总结每次看到都赏心悦目。

 typedef String *pstring;
const pstring cstr;
 = String *const cstr;

这个很少用到,但是应该注意!可以通过调整const的位置置后来理解。

Use strncpy & strncat, instead of strcpy & strcat.

可以防止很多潜在的错误。

Multidimensioned array is actually an array of arrays.

Well,理解多维数组织指针的时候需要的就是这个解释。

四章内容可以说是比较难以掌握好的,我还清楚记得刚开始学习C语言时候的混乱。即使是过来人了,也常常在这里摔跤。而且就算我早已摒弃了C-style String,但是和别人写的程序交互的时候还是会用到,而且常常因为不注意而埋下潜在的运行期错误,这种错误有的时候很难找到。

吃药,睡觉,希望明天可以好起来。把Del.icio.us的js加上了,另外期待看到百度股价新的走势。

注:可能感冒晕的,昨天发的时候把IV写成IX了,惭愧惭愧,改之……

Trackback: http://tb.donews.net/TrackBack.aspx?PostId=497905