13.1.2 字符数组

代码清单13-2的目的是阐明如何使用字符数组。然而,下面有一个值得讨论的问题,你能发现它吗?

代码清单13-2


import<Foundation/Foundation.h>

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

{

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

char word[]={‘H’,‘e’,‘l’,‘l’,‘o’,‘!’};

int i;

for(i=0;i<6;++i)

NSLog(@“c”,word[i]);

[pool drain];

return 0;

}


代码清单13-2输出


H

e

l

l

o


上面的程序最值得注意的一点是字符数组word的声明。它没有指出数组中的元素个数。Objective-C语言允许定义没有指明元素个数的数组。如果是这样定义的,则自动根据初始化元素的数目确定该数组大小。因为代码清单13-2为数组word列出了6个初始值,所以Objective-C语言隐式地将该数组定义为6元素。

只要在定义数组时初始化了数组中的每个元素,这种方式就没有问题。但如果不是这种情况,就必须显式地给出数组的大小。

如果在字符数组结尾添加一个终止空字符(‘\0’),就产生了一个通常称为字符串的变量。如果将代码清单13-2中数组word的初始化语句替换为


char word[]={‘H’,‘e’,‘l’,‘l’,‘o’,‘!’,‘\0’};


随后,就可以如下使用printf语句显示这个字符串:


NSLog(@“s”,word);


因为%s格式字符告诉printf持续显示字符直到到达终止空字符,也就是在word数组最后添加的字符,所以该语句没有问题。