diff options
fix typos
1 files changed, 6 insertions, 5 deletions
| -rw-r--r-- | Seminar01/README.md | 11 |
diff --git a/Seminar01/README.md b/Seminar01/README.md index 26d2b65..79424b2 100644 --- a/Seminar01/README.md +++ b/Seminar01/README.md @@ -5,10 +5,11 @@ * Да заделяме динамично памет в heap-а * Итерираме елементите на масив или друга структура от данни * Подаваме функции като аргументи на други функции + и много други. Указателите са удобен и изключително гъвкав инструмент, с който често ще ни се налага да работим. -Нека разгледаме следния сценарии. +Нека разгледаме следния сценарий. ```c++ int main() { int a = 10; @@ -16,7 +17,7 @@ int main() { int* ptr = &a; } ``` -Искаме да напишем функция, която приема указател и променлива и кара указателя да сочи към тази променлива. Дали следния код ще свърши работа: +Искаме да напишем функция, която приема указател и променлива и кара указателя да сочи към адреса на тази променлива. Дали следния код ще свърши работа: ```c++ #include<iostream> @@ -33,14 +34,14 @@ int main() { std::cout << *ptr; // *ptr връща стойността записана в този адрес } ``` -Очевидно това не сработи, но защо? Във функцията *redirect* на *ptr* се прави **копие**. После това копие започва да сочи към *dest*, но на нас това не ни помага! Ние искаме да пренасочим **самия указател а не неговото копие**. Тук на помощ идват референциите (или псевдонимите)! Ако пренапишем функцията по следния начин +Очевидно това не сработи, но защо? Във функцията *redirect* на *ptr* се прави **копие**. После това копие започва да сочи към *dest*, но на нас това не ни помага! Ние искаме да пренасочим **самия указател а не неговото копие**. Тук на помощ идват референциите (или псевдонимите). Ако пренапишем функцията по следния начин ```c++ void redirect(int*& ptr, int& dest) { ptr = &dest; } ``` -то вече функцията върши желаната задача. Когато приемаме обект по референция **копие не се прави**. Това важи за всички типове - включително и за указателите. +то вече функцията върши желаната работа. Когато приемаме обект по референция **копие не се прави**. Това важи за всички типове - включително и за указателите. Можем да правим указатели към всякакви типове включително и към указатели. Типът **int**** не е нищо повече от указател към указател. Тогава не можем ли просто да вземем указател към указателя и да го променим по този начин? @@ -62,7 +63,7 @@ int main() { ``` Този код също върши работа. Тогава каква е разликата между указател и референция? -Разликата е, че указателите са по - гъвкави. Не можем да пренасочим референция. Също така не можем да имаме референция която не сочи към обект. При указателите имаме специален тип наречен nullptr, който сочи към "нищото". Често референцията е представяна като указател, който не може да се пренасочва, вика *** вместо теб и винаги сочи към обект. +Разликата е, че указателите са по - гъвкави. Не можем да пренасочим референция. Също така не можем да имаме референция която не сочи към обект. При указателите имаме специален тип наречен nullptr, който сочи към "нищото". Често референцията е представяна като указател, който не може да се пренасочва, вика * вместо теб и винаги сочи към обект. ## const и указателите За *const* важи следното правило - *const* винаги модифицира това което е в негово ляво, освен когато няма нищо отляво, тогава модифицира това което е отдясно. |
