переменная
В предыдущем примере необязательно было использовать переменную
// Передача указателя функции -- исправленная версия.
#include
using namespace std;
void f (int *j);
int main()
{
int i;
f(&i);
cout << i;
return 0;
}
void f (int * j)
{
*j = 100; // Переменной, адресуемой указателем j, присваивается число 100.
}
Передавая указатель функции, необходимо понимать следующее. При выполнении некоторой операции в функции, которая использует указатель, эта операция фактически выполняется над переменной, адресуемой этим указателем. Таким образом, такая функция может изменить значение объекта, адресуемого ее параметром.
Если массив является аргументом функции, то необходимо понимать, что при вызове такой функции ей передается только адрес первого элемента массива, а не полная его копия. (Помните, что в C++ имя массива без индекса представляет собой указатель на первый элемент этого массива.) Это означает, что объявление параметра должно иметь тип, совместимый с типом аргумента. Вообще существует три способа объявить параметр, который принимает указатель на массив. Во-первых, параметр можно объявить как массив, тип и размер которого совпадает с типом и размером массива, используемого при вызове функции. Этот вариант объявления параметра-массива продемонстрирован в следующем примере.
#include
using namespace std;
void display(int num[10]);
int main()
{
int t[10], i;
for(i=0; i<10; ++i) t[i]=i;
display(t); // Передаем функции массив t.
return 0;
}
// Функция выводит все элементы массива.
void display(int num[10])
{
int i;
for(i=0; i<10; i++) cout << num[i] <<' ';
}
Несмотря на то что параметр
Второй способ объявления параметра-массива состоит в его представлении в виде безразмерного массива, как показано ниже.
void display(int num[])
{
int i;
for(i=0; i<10; i++) cout << num[i] << ' ';
}
Здесь параметр
Наконец, рассмотрим третий способ объявления параметра-массива. При передаче массива функции ее параметр можно объявить как указатель. Как раз этот вариант чаще всего используется профессиональными программистами. Вот пример:
void display(int *num)
{
int i;
for(i=0; i<10; i++) cout << num[i] << ' ';
}
Возможность такого объявления параметра (в данном случае
Однако отдельный элемент массива, используемый в качестве аргумента, обрабатывается подобно обычной переменной. Например, рассмотренную выше программу можно было бы переписать, не используя передачу целого массива:
#include
using namespace std;
void display(int num);
int main()
{
int t[10],i;
for(i=0; i<10; ++i) t[i]=i;
for(i=0; i<10; i++) display(t[i]);
return 0;
}
// Функция выводит одно число.
void display(int num)
{
cout << num << ' ';
}