Skip to content

Commit 182ae2a

Browse files
committed
Add function args module
1 parent 133a97e commit 182ae2a

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

src/11_function_args.cpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#include <iostream>
2+
3+
void pass_by_value(int value) {
4+
// Что здесь происходит?
5+
// 1. value - это локальная переменная функции
6+
// 2. при вызове функции в value копируется значение переданного аргумента
7+
8+
value = 10; // меняем значение локальной переменной
9+
}
10+
11+
void pass_by_pointer(int* pointer) {
12+
// Что здесь происходит?
13+
// 1. pointer - это локальная переменная функции
14+
// 2. при вызове функции в pointer устанавливается значение адреса переданного аргумента
15+
16+
*pointer = 11; // меняем значение по адресу участка памяти
17+
}
18+
19+
void pass_by_reference(int& reference) {
20+
// Что здесь происходит?
21+
// 1. reference - это локальная переменная функции
22+
// 2. при вызове функции в reference устанавливается значение адреса переданного аргумента
23+
24+
reference = 12; // меняем значение по адресу участка памяти (как и в случае с указателем)
25+
}
26+
27+
void pass_array(int* arr, int length) {
28+
// Что здесь происходит?
29+
// 1. arr и length - это локальные переменные функции
30+
// 2. при вызове функции:
31+
// - в arr устанавливается значение адреса первого элемента массива
32+
// - в length копируется значение длины массива
33+
34+
arr[0] = 1; // меняем значение элементов массива по адресу участка памяти
35+
36+
std::cout << "Pass array: ";
37+
for (int i = 0; i < length; i++) {
38+
std::cout << arr[i] << ' ';
39+
}
40+
std::cout << '\n';
41+
}
42+
43+
int main() {
44+
45+
int variable = 0;
46+
47+
pass_by_value(variable);
48+
std::cout << "Pass by value: " << variable << '\n';
49+
50+
pass_by_pointer(&variable);
51+
std::cout << "Pass by pointer: " << variable << '\n';
52+
53+
pass_by_reference(variable);
54+
std::cout << "Pass by references: " << variable << '\n';
55+
56+
int arr[] = {0, 1, 1};
57+
pass_array(arr, 3); // эквивалентно: pass_array(&arr[0], 3);
58+
59+
return 0;
60+
}
61+
62+
/*
63+
* Задания:
64+
* 1. Можно ли запретить изменение данных при передаче аргументов по указателю/ссылке?
65+
* 2. Как передать массив в функцию по значению (копию)?
66+
*/

0 commit comments

Comments
 (0)