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