第二章、第三章

来源:互联网 发布:android开发内存优化 编辑:程序博客网 时间:2024/04/28 05:38

1、三字母词、转义字符

三字母词:三个字母的序列合起来表示一个字符。两个问号开头再尾随一个字符 。 

eg:

  ??(   [       /*?? 开头*/

??)   ]

??! |

作用:如果你所使用的字符集缺少某些字符,可以使用三字母词表示缺少的字符。

转义字符:由一个反斜杠加上一个或多个其他字符组成。

  \?     在连续书写多个问号时使用,防止他们被解释为三字母词。   

\"用于表示字符串内部的双引号。   “abc\"defgh”

\' 用于表示字符常量

\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符 。

其他转义字符还有:\a   \n  \b  \t  \f  \v  等等。

\ddd ddd表示1--3个八进制数字,这个转义字符表示的的字符就是给的的八进制数值所代表的字符、

\xddd      与上面类似,只不过这个ddd是十六进制数   。


2、如果注释符/**/ 出现在字符串字面值内部,就不再起注释界定符的作用了。

所有的注释都会被预处理器拿掉,取而代之的是一个空格,因此。注释可以出现在任何空格可以出现的地方。


3、整型值之间的大小规则

标准并没有规定长整型必须比短整型长,只是规定它不得比短整型短、

总结起来就一句话:

长整型至少应该和整型一样长,而整型至少应该和短整型一样长、

short int 至少16位,ling int 至少32位,至于缺省的int 究竟是16位还是32位,或者是其他值则由编译器设计者决定。


4、char类型

char类型本质上就是小整型。容纳一个字符、

缺省的char要么是signed char,要么是unsigned char,这取决于编译器,这个事实意味着不同的机器上的char可能拥有不同范围的值,所有当程序所使用的char型变量的值位于signed char 和 unsigned char 的交集中,这个程序才是可移植的。


5、枚举类型

枚举类型就是指它的值为符号常量,而不是字面值的类型。

枚举类型声明:

enum Jar_Type{CPU , PINT , QUART , HALT , GALLON };

枚举变量的声明:

enumJar_Type   a,b,c;   /*声明 3个枚举变量 a b c */

注意2点:

1、枚举类型里声明的枚举枚举常量之间用逗号分隔,并且枚举类型定义的变量只能用枚举常量给它赋值,不能用整数或其他形式辅助!

a = CPU;     /*正确*/

a = 0;         /*错误,不属于同一类型*/

a = (Jar_Type) 0 ;    /*正确,强制类型转换*/

2、这种类型的变量实际上是以整型的方式存储的,这些符号名的实际值都是整型值,如果没有给枚举常量指定值,枚举常量的值默认是从 0 开始的(CPU=0)。以此类推,适当的时候你可以为这些变量指定特定的值,如:

enumJar_Type{CPU , PINT=10 , QUART , HALT=15 , GALLON };

像上面这样,只对部分符号指定值也是合法的,如果某个符号未显示指定一个值,那么它的值就比前面一个符号名的值大 1 。

总结、作用:

如果一个变量(整型)只能有几种可能的取值,可以定义为枚举类型,所谓枚举类型就是将变量的值一一列出来,变量的值只能在列出来的值的范围内。

6、C数组值得关注的一个地方是,编译器并不检查程序对数组下标的引用是否合在合法的范围之内,即,不对数组下标的有效性进行检查。所以在使用时要注意数组越界的问题。


7、声明指针变量时,要注意星号(*)所带来的问题。

int*  a,b,c;

人们可能很自然的认为这三个变量被声明为 int*的指向整型的指针,但事实上并非如此。星号*实际上是表达式*a的一部分,a是一个指针,b和c都是普通整型变量,要声明3个指针的正确形式是:

int  *a  ,  *b  ,  *c;

  在使用指针时,星号最好和变量靠近一些,防止这样的失误。


8、函数如果省略了返回值类型和参数类型,编译器就会默认为int型。

函数的形参不能声明为static类型,因为static类型变量是存储在静态存储区的,而函数的实参都是在堆栈中传递给函数的。形参多用const修饰为只读,起保护作用。


9、typedef 与 #define

在定义一种新的数据类型时应该使用typedef,而不是使用#define,因为后者无法正确处理指针类型、

#defineP_CHAR char*

P_CHAR    a ,    b;

/*   

*  本意上是定义2个字符类型的指针,实际上只有a是指针变量,b确实一个普通的字符变量。以为宏在展开式只是简单的替换操作。

*/

正确定义如下:

typedefP_CHAR char*

P_CHAR    a ,    b; /*a ,b都为指针变量*/


0 0
原创粉丝点击