Выбрать главу

#include <iostream>

using namespace std;

void cube(int *n, int num);

int main()

{

 int i, nums[10];

 for(i=0; i<10; i++) nums[i] = i+1;

 cout << "Исходное содержимое массива: ";

 for(i=0; i<10; i++) cout << nums[i] << ' ';

 cout << '\n';

 cube(nums, 10); // Вычисляем кубы значений.

 cout << "Измененное содержимое: ";

 for(i=0; i<10; i++) cout << nums[i] << ' ';

 return 0;

}

void cube(int *n, int num)

{

 while(num) {

  *n = *n * *n * *n;

  num--;

  n++;

 }

}

Результаты выполнения этой программы таковы.

Исходное содержимое массива: 12345678910

Измененное содержимое: 1 8 27 64 125 216 343 512 729 1000

Как видите, после обращения к функции cube() содержимое массива nums изменилось: каждый элемент стал равным кубу исходного значения. Другими словами, элементы массива nums были модифицированы инструкциями, составляющими тело функции cube(), поскольку ее параметр n указывает на массив nums.

Передача функциям строк

Как вы уже знаете, строки в C++ — это обычные символьные массивы, которые завершаются нулевым символом. Таким образом, при передаче функции строки реально передается только указатель (типа char*) на начало этой строки. Рассмотрим, например, следующую программу. В ней определяется функция stringupper(), которая преобразует строку символов в ее прописной эквивалент.

// Передача функции строки.

#include <iostream>

#include <cstring>

#include <cctype>

using namespace std;

void stringupper(char *str);

int main()

{

 char str[80];

 strcpy(str, "Мне нравится C++");

 stringupper(str);

 cout << str; // Отображаем строку с использованием прописного написания символов.

 return 0;

}

void stringupper(char *str)

{

 while(*str) {

  *str = toupper(*str); // Получаем прописной эквивалент одного символа.

  str++; // Переходим к следующему символу.

 }

}

Результаты выполнения этой программы таковы.

МНЕ НРАВИТСЯ C++

Обратите внимание на то, что параметр str функции stringupper() объявляется с использованием типа char*. Это позволяет получить указатель на символьный массив, который содержит строку. Рассмотрим еще один пример передачи строки функции. Как вы узнали в главе 5, стандартная библиотечная функция strlen() возвращает длину строки. В следующей программе показан один из возможных вариантов реализации этой функции.

// Одна из версий функции strlen().

#include <iostream>

using namespace std;

int mystrlen(char *str);

int main()

{

 cout << "Длина строки ПРИВЕТ ВСЕМ равна: ";

 cout << mystrlen("ПРИВЕТ ВСЕМ");

 return 0;

}

// Нестандартная реализация функции strlen().

int mystrlen(char *str)

{

 int i;

 for(i=0; str[i]; i++); // Находим конец строки.

 return i;

}

Вот как выглядят результаты выполнения этой программы.

Длина строки ПРИВЕТ ВСЕМ равна: 11

В качестве упражнения вам стоило бы попытаться самостоятельно реализовать другие строковые функции, например strcpy() или strcat(). Этот тест позволит узнать, насколько хорошо вы освоили такие элементы языка C++, как массивы, строки и указатели.

Аргументы функции main(): argc и argv