Как правильно вызывать функции

Изучая основы программирования по работе с функциями, не всегда просто понять, как правильно вызывать функцию. Тем не менее, все очень просто, попробуем в этом разобраться.

1. Чтобы вызвать функцию вам нужно знать только ее прототип. Прототип – это заголовок функции вместе с формальными параметрами.

Примеры:

int Grow(int a, float* c);

int Carrage(int* cr);

void SetVal(int &s);

2. Прототип функции дает нам всю необходимую информацию для вызова функции:

функция Grow требует первый параметр типа int, второй - указатель на тип float.

функция Carrage требует один параметр - указатель на тип int.

функция SetVal требует один параметр – ссылку на переменную типа int.

3. Теперь нужно определить какие переменные у нас есть в том месте, где мы хотели бы осуществить вызов этих функций. Допустим, мы будем вызывать их из главной программы, в которой у нас объявлены следующие переменные:

Int main()

{

int x, d, t[10];

float z, arr[20];

int *pVi;

float *pVf;

}

4. Последний шаг – это дать функции те типы значений, которые она хочет получить.

функция Grow требует первый параметр типа int, второй -указатель на тип float.

Правильные варианты фактических параметров:

Grow(x, pVf);

Grow(10, &z);

Grow(t[0], arr);

Кроме этого функция возвращает результат типа int в своем имени. Вы можете его использовать, если хотите:

d = Grow(x, pVf);

cout<<Grow(10, &z);

x = x + Grow(t[0], arr);

Неправильные варианты вызовов:

Grow(pVf, x); // порядок параметров нарушен: 1й – параметр не int, 2й – не float*

Grow(10); // функция требует 2 параметра, а не один

Grow(t, arr); // имя массива – это указатель на тип int, нужно значение типа int

z = Grow(x, pVf); // возвращаемое значение типа int, но z – типа float

Прототип функции не всегда позволяет точно определить входные и выходные параметры. Если имя функции имеет тип, отличный от void, то можно точно сказать, что функция возвращает как минимум одно значение. Например:

int Carrage(int* cr);

Однако в данном случае нельзя однозначно сказать, чем является формальный параметр cr – входным или выходным значением. Такой механизм может быть использован как для передачи массива, так и для передачи адреса простой переменной типа int. Поэтому для определения назначения формальных параметров необходимо либо изучить тело функции, либо воспользоваться справкой (если функция является стандартной).


2.7. Задача. Все функции с помощью различных механизмов (передача по значению, по ссылке, по адресу) получают на вход целочисленное значение и возводят его в квадрат. Укажите формат вызова этих функций:

a) при использовании целочисленной переменной (столбец 3)

b) при использовании указателя на целочисленную переменную (столбец 4)

Прототип функции Обращение к значению num внутри функции Вызов функции
       
    int val int* ptr
void squareVal(int num) num squareVal() squareVal()
void squarePointer(int *num) *num squarePointer() squarePointer()
void squareReference(int &num) num squareReference() squareReference()
void squarePointerReference(int* &num) *num - squarePointerReference()

#include <iostream>

#include <stdlib.h>

using std::cout;

using std::endl;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: