@songpfei
2016-02-24T11:40:07.000000Z
字数 889
阅读 1412
程序设计论著笔记
p19:参数传递赋值约束:要使赋值合法,必须满足下列条件之一:
连个操作数都是指向有限定符或无限定符的相容类型指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。
eg1:
char *cp;
const char *ccp;
cpp=cp;//可以正常赋值
cp=ccp; /*编译错误*/
const float *
不是一个有限定符的指针类型---它的类型是“指向一个具有const限定符的float类型的指针”,也就是说const限定符限定的是修饰指针所指向的类型,而不是指针本身。const char**
也是一个没有限定符的指针类型。它的类型是“指向一个具有const限定符的char类型的指针的指针”。 char **
和const char**
都是没有限定符的指针类型,但他们所指向的类型不一样(前者指向 char*
,后者指向const char*
),因此他们是不相容的。p24:对无符号类型的建议:
尽量不要在你的代码中使用无符号类型,以免增加不必要的复杂性。尤其是,不要仅仅因为无符号数不存在(如年龄、国债)而用它来表示数量。
尽量使用int那样的有符号类型,这样在涉及升级混合类型的复杂细节时,不必担心边界情况(如-1被译为非常大的正数)
只有在使用位段和二进制掩码时,才可以使用无符号类型。应该在表达式中使用强制类型转换,是操作数均为有符号或无符号数,这样就不必由编译器来选择类型结果。
p25:一个好的宏定义:
#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))//使用该方式,移值方便
\\而不是
#define TOTAL_ELEMENTS (sizeof(array)/sizeof(int))//不便于修改数组基本类型