В программе 1.3 показано, как использовать массив символов. Однако здесь есть одна особенность, требующая обсуждения. Вы уже видите ее?
Программа 1.3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#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; } |
Вывод программы 1.3:
1 2 3 4 5 6 |
H e l l o ! |
Наиболее примечательной особенностью этой программы является объявление массива символов word без указания числа элементов. При определении массива без указания числа элементов размер массива определяется автоматически по числу инициализируемых элементов.
Поскольку в программе 1.3 для массива word инициализируются шесть значений, язык Objective-C по умолчанию определят, что данный массив содержит шесть элементов.
Этот принцип выполняется, если мы инициализируем каждый элемент массива в том месте, где определяется этот массив. В противном случае необходимости явным образом задать размер массива.
Если поместить завершающий нуль-символ (‘\0’) в конце массива символов, то создается символьная строка(character string). Если в программе 1.3 заменить инициализацию массива word на строку:
1 |
char word[] = { 'H', 'e', 'l', 'l', 'o', '!', '\0' }; |
то в дальнейшем можно выводить эту строку с помощью одного вызова NSLog, например:
1 |
NSLog(@"%s", word); |
Символы форматирования %s указывают NSLog, что вывод символов должен продолжаться до тех пор, пока не будет достигнут завершающий нуль-символ. А именно этот символ мы поставили в конце массива word.