В этом уроке я объясню, как передать функции массив, указатель, а также как вернуть указатель из функции.
Начнем с массива. Здесь важно понять, что в функцию передается не сам массив, а указатель на его первый элемент. При этом если в качестве параметра не указать размерность массива, то она при компиляции потеряется, поэтому ее надо указывать. Вот пример программы, в которой в качестве аргумента передается массив:
#include <iostream>
#include <windows.h>
using namespace std;
void show(int num[5]);
int main()
{
int num[5] = {1, 2, 3, 4, 5};
show(num);
cout << "\n\n";
system("PAUSE");
return 0;
}
void show(int num[5])
{
int i;
cout << "Выводим массив num на экран: ";
for(i=0; i<5; i++)
{
cout << num[i] << " ";
}
}
Если вы читали урок про использование указателей, то вы знаете, что если указатель содержит адрес первого элемента массива, то его можно индексировать как обычный массив. Нельзя также забывать что, передавая указатель на первый элемент массива, мы работаем с оригиналом массива, а не с его копией. И любые изменения элементов массива в функции, изменят и оригинал. Чтобы убедиться в этом, давайте немного изменим предыдущую программу:
#include <iostream>
#include <windows.h>
using namespace std;
void show(int num[5]);
int main()
{
int i;
int num[5] = {1, 2, 3, 4, 5};
cout << "Массив num до вызова функции show: ";
for(i=0; i<5; i++)
{
cout << num[i] << " ";
}
cout << "\n\n";
show(num);
cout << "\n\n";
system("PAUSE");
return 0;
}
void show(int num[5])
{
int i;
cout << "Массив num после вызова функции show: ";
for(i=0; i<5; i++)
{
(num[i])++;
cout << num[i] << " ";
}
}
Вот результат выполнения этой программы:
Массив num до вызова функции show: 1 2 3 4 5
Массив num после вызова функции show: 2 3 4 5 6
Для продолжения нажмите любую клавишу . . .
Точно также можно передавать многомерные массивы. Вот пример такой программы:
#include <iostream>
#include <windows.h>
using namespace std;
void show(int num[2][5]);
int main()
{
int num[2][5] =
{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 0}
};
show(num);
cout << "\n\n";
system("PAUSE");
return 0;
}
void show(int num[2][5])
{
int i, j;
cout << "Выводим массив num на экран: ";
for(int i=0; i<2; i++)
{
for(int j=0; j<5; j++)
{
cout << num[i][j] << " ";
}
}
}
Если нужно передать в функцию строку, то ее можно предать в виде массива типа char. Вот пример программы, в которой в функцию передается строка:
#include <iostream>
#include <windows.h>
using namespace std;
void show(char str[14]);
int main()
{
char str[14];
strcpy(str, "Hello, World!");
show(str);
cout << "\n\n";
system("PAUSE");
return 0;
}
void show(char str[14])
{
while(*str)
{
cout << *str;
str++;
}
}
При этом важно помнить, что указатель всегда глобален. Поэтому если вам понадобится вывести переданную строку еще раз, то вам придется переустановить указатель, на начало, вычтя из него число, либо скопировать ее в другой символьный массив, объявленный внутри функции.
Функция может возвращать не только переменную, но и указатель. В следующей программе помощи указателя мы сдвигаем его на девятую букву во фразе «Hello, World!» и возвращаем его с помощью функции return, и выводим его на экран.
#include <iostream>
#include <windows.h>
using namespace std;
char *ShowSymbol(char str[14]);
int main()
{
char str[14];
char *symbol = 0;
symbol = ShowSymbol("Hello, World!");
cout << *symbol;
cout << "\n\n";
system("PAUSE");
return 0;
}
char *ShowSymbol(char str[14])
{
str = str + 9;
return str;
}
Ну, вот пока и все, что я хотел вам рассказать в этом уроке. В следующем уроке мы продолжим изучение функций.