4.1.4 char类型

char变量可存储单个字符。将字符放入一对单引号中就能得到字符常量。因此,‘a’,‘;’和‘0’都是合法的字符常量。第一个常量表示字母a,第二个表示分号,第三个表示字符0,它并不等同于数字0。不要把字符常量和C风格的字符串混为一谈,字符常量是放在单引号中的单个字符,而字符串则是放在双引号中的任意个数的字符。正如在上一章提及的,前面有@字符并且放在双引号中的字符串是NSString字符串对象。

注意附录B讨论了存储字符的方法,这些字符来自扩展的字符集,包括特殊的转义序列、通用字符以及宽位字符。

字符常量‘\n’(即换行符)是一个合法的字符常量,尽管它似乎与前面提到的规则矛盾。出现这种情况的原因是反斜杠符号是Objective-C系统中的特殊符号,实际上并不把它看成一个字符。换句话说,Objective-C编译器将字符‘\n’看作单个字符,尽管它实际上由两个字符组成。其他的特殊字符由反斜杠字符开头。要了解全部特殊字符,可参见附录B。在NSLog调用中可以使用格式字符%c,以便显示char变量的值。

在代码清单4-1中,使用了基本的Objective-C数据类型。

代码清单4-1


import<Foundation/Foundation.h>

int main(int argc, char*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];

int integerVar=100;

float floatingVar=331.79;

double doubleVar=8.44e+11;

char charVar=‘W’;

NSLog(@“integerVar=%i”,integerVar);

NSLog(@“floatingVar=%f”,floatingVar);

NSLog(@“doubleVar=%e”,doubleVar);

NSLog(@“doubleVar=%g”,doubleVar);

NSLog(@“charVar=%c”,charVar);

[pool drain];

return 0;

}


代码清单4-1输出


integerVar=100

floatingVar=331.790009

doubleVar=8.440000e+11

doubleVar=8.44e+11

charVar=‘W’


在程序输出的第二行,你会注意到指派给floatingVar的值331.79,实际显示成了331.790009。事实上,实际显示的值是由使用的特定计算机系统决定的。出现这种不准确值的原因是:计算机内部使用特殊的方式表示数字。使用计算器处理数字时,很可能遇到相同的不准确性。如果用计算器计算1除以3,将得到结果.33333333,很可能结尾带有一些附加的3。这串3是计算器计算1/3的近似值。理论上,应该存在无限个3。然而该计算器只能保存这些位的数字,这就是计算机的不确定性。此处应用了相同类型的不确定性:在计算机内存中不能精确地表示一些浮点值。