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数组最后添加的字符,所以该语句没有问题。