Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Функции.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
48.25 Кб
Скачать

Параметры функции

Функция может иметь параметры, которые служат для передачи в нее значений. Это делает работу с ней более гибкой. В параметрах открыто указывается, какую информацию функция получает извне. При этом можно говорить об интерфейсе функции.

Объявление параметров функции аналогично объявлению переменных. Тип параметров важен для проверки соответствия передаваемого значения внутреннему параметру функции. Через имена параметров функция получает их значения извне. Значение, которое при вызове передается в функцию, копируется. Поэтому возможно передавать также константы.

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

При объявлении параметров можно написать тип без соответствующего ему имени переменной.

float func(bool, float);

Естественно, внутри функции нельзя получить доступ к этому параметру. Однако есть случаи, в которых задан интерфейс функции и нужно написать его техническую реализацию. В связи с этим может оказаться, что какой-то параметр вообще не будет использоваться. Поскольку изменение интерфейса может повлиять на работу других частей программы, лишний параметр оставляют.

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

Передача параметров в функцию: одномерные массивы, строки

Одномерный массив

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

#include <iostream>

using namespace std;

//Функция, формирующая массив

int form(int *arr){

int n;

cin >> n; //Ввод количества элементов в массиве

for (int i = 0; i < n; i++)

arr[i] = rand() % 100;

return n; //Возвращаем количество элементов массива

}

//Функция печати массива

void print(int *arr, int n) {

for (int i = 0; i < n; i++)

cout << arr[i] << " ";

cout << endl;

}

int main(){

int arr[100];

int n;

n = form(arr); //Вызов функции формирования массива и присвоение количества элементов

print(arr, n); //Печать массива

}

При использовании динамических массивов в функцию передается указатель на область динамической памяти, в которой размещаются элементы массива. Функция также может возвращать указатель на область динамической памяти, в которой размещаются элементы массива.

#include <iostream>

using namespace std;

//Функция, формирующая массив

int* form(int &n){

cin >> n; //Ввод количества элементов в массиве

int *arr = new int[n];

for (int i = 0; i < n; i++)

arr[i] = rand() % 100;

return arr; //Возвращаем указатель на динамический массив

}

//Функция печати массива

void print(int *arr, int n) {

for (int i = 0; i < n; i++)

cout << arr[i] << " ";

cout << endl;

}

int main(){

int* arr;

int n;

arr = form(n); //Вызов функции формирования массива

print(arr, n); //Печать массива

}

Строки

Строки, при передаче в функции, могут передаваться как одномерные массивы типа char или указатели типа char*. В отличие от обычных массивов в функциях не указывается длина строки, так как в конце строки присутствует признак ее окончания – ‘\0’.

#include <iostream>

using namespace std;

//Функция, формирующая массив

int find_vow(char* s, char c){

for (int i = 0; i < strlen(s); i++)

if (s[i] == c)

return i;

return -1;

}

int main(){

char s[255];

int k = 0;

cin.getline(s, strlen(s));

char vowels[] = "aouiey";

//Каждый символ введенной строки сравнивается с каждым

//символом из строки гласных

for (int i = 0; i < strlen(s); i++)

for (int j = 0; j < 6; j++) {

if (s[i] == vowels[j])

k++;

}

cout << endl << k;

}