Передача аргументом символьного массива в С++
Поскольку один из вариантов реализации текстовых строк подразумевает их представление в виде символьного массива, нетрудно догадаться, что
текстовые строки могут передаваться аргументами функциям практически так же, как и прочие массивы. Хотя имеются и свои особенности. В основном они касаются способов обработки таких символьных массивов. Пример приведен в следующем коде.
Функцией length(char *str) для массива, указанного аргументом функции, подсчитывается количество символов. Для этого используется оператор цикла, в блоке инициализации которого с нулевым начальным значением инициализируется переменная s. Переменная необходима для подсчета количества символов, В качестве проверяемого условия указана инструкция *str (где str есть аргумент функции - указатель на данные типа char). В данном случае использовано то обстоятельство, что фактическая текстовая строка, представленная в виде символьного массива, заканчивается нуль-символом. Поэтому достижение конца строки эквивалентно тому, что значение соответствующего элемента массива равняется нулю. В блоке инкремента две команды: одной на единицу увеличивается значение перемен ной-счетчика а, а второй командой на единицу увеличивается значение указателя str. Напомним, что адресная арифметика имеет свои правила: увеличение указателя на единицу означает переход к следующей ячейке памяти. Поскольку элементы массива размещаются в памяти под ряд один за другим, изменение указателя на единицу означает переход к следующему элементу массива. В качестве значения функции возвращается значение переменой з. Также обращаем внимание читателя на то обстоятельство, что размер массива аргументом функции не передается. В данном случае в этом нет необходимости в силу двух причин. Во-первых, сам по себе размер массива не очень актуален, поскольку речь идет о сим вольном массиве, в котором фактические данные занимают не все ячейки. Во-вторых, поскольку существует четкий признак окончания строки (имеется в виду нуль-символ, которым строка заканчивается), необходимости явно указывать размер строки нет.
#includeusing namespace std; int length(char *str){ for(int s=0;*str;s++,str++); return s; } int main(){ char str[20]="This is a string"; cout << "Length is " << length(str) << endl; return 0; }