Website Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitfd8930b9c939f3b234b7fe661f329004a931b79c (patch)
Author
 Stoycho Kyosev <stoycho.kk@gmail.com>
2022-10-05 16:43:42 +0300
Committer
 Stoycho Kyosev <stoycho.kk@gmail.com>
2022-10-05 16:43:42 +0300
Files1bc427bb4f66c509aba8ba606d2376b19599be78
Data-structures-and-algorithms-fd8930b9c939f3b234b7fe661f329004a931b79c.tar
Data-structures-and-algorithms-fd8930b9c939f3b234b7fe661f329004a931b79c.tar.gz
Data-structures-and-algorithms-fd8930b9c939f3b234b7fe661f329004a931b79c.zip
Parentc1e2e5e66792836f81f5cab1450093e0906462f3 (diff)
fix typos
1 files changed, 6 insertions, 5 deletions
-rw-r--r--Seminar01/README.md11
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* винаги модифицира това което е в негово ляво, освен когато няма нищо отляво, тогава модифицира това което е отдясно.