Witam i witam ponownie.
W tym wykładzie chcę porozmawiać o modyfikatorze const io tym,
jak używamy go ze wskaźnikami.
Dowiedzieliśmy się o stałych wcześniejszych wykładach.
Oznacza to po prostu, że nie możesz zmienić wartości zmiennej. Ale co to znaczy, kiedy zastosujemy go do wskaźnika?
Więc kiedy używamy modyfikatora const w zmiennej lub
tablicy, mówi on kompilatorowi, że zawartość tablicy zmiennych nie zostanie zmieniona przez program.
Alternatywą było utworzenie instrukcji definiujących przez preprocesor, ale const jest
zwykle bardziej wydajnym i lepszym sposobem na zrobienie tego.
Jeśli chodzi o wskaźniki, musimy wziąć pod uwagę dwie rzeczy, używając modyfikatora const.
Czy faktycznie mówimy, że wskaźnika nie można zmienić?
A może mówimy, że wartość wskazywana przez wskaźnik nie może zostać zmieniona?
Pamiętaj, że wskaźnik zawiera wartość adresu.
I możemy nigdy nie chcieć zmieniać tego adresu.
Lub możemy nie chcieć zmieniać wartości wskazywanej przez punkt.
W obu przypadkach musimy być konkretni w naszej składni.
Możesz więc użyć słowa kluczowego const, kiedy deklarujesz wskaźnik, aby wskazać, że wskazana wartość
nie może zostać zmieniona.
Sposób, w jaki podajesz to i ponownie,
aby wskaźnik był wartością, ponieważ wartość ma adres.
Wskazuje na wartość tego adresu.
Jeśli chcesz, żeby to się nie zmieniło,
zrobiłbyś coś takiego.
Powiedziałbyś, że deklarując wskaźnik, umieściłbyś gwiazdkę w
stałym modyfikatorze przed typem.
Więc można powiedzieć, że stała, niezależnie od typu, który jest wskaźnikiem gwiazdki.
Więc to jest faktycznie zdeformowane definiując wskaźnik
do stałej.
Nie będziemy mogli zmienić 999l.
Dlatego deklarujemy, że wartość wskazywana przez wartość p jest stała.
Kompilator sprawdzi, czy nie ma instrukcji, które próbują zmodyfikować wartość wskazywaną przez wartość p.
A jeśli w programie jest jakikolwiek kumpel, który robi to w programie, spowoduje to zgłoszenie błędu.
Więc to jest składnia. Znowu to, co chcesz
tutaj zauważyć, to const jest pierwszym
słowem i jest przed typem. Oznacza to, że wartość, na którą wskazuje, nie
może się zmienić.
Więc jeśli spróbujesz zrobić coś takiego na pvalue, spróbuj przypisać
wartość do tego, na co wskazuje, ponieważ widzisz
tam operator pośredni. Oznacza to, że przypisujemy wartość
temu, na co wskazujemy. Jeśli spróbujemy to
zrobić, wystąpi błąd, ponieważ nie możemy zmienić tej
wartości, nie możemy zmienić 999l na 888l.
A teraz co ze wskaźnikami do stałych.
W poprzedniej deklaracji utworzyliśmy wskaźnik,
na który wskazuje punkt, nie może się zmienić.
Ale nadal możemy zmienić rzeczywistą wartość zmiennej, którą zadeklarowaliśmy.
Więc nadal moglibyśmy zmienić wartość długą.
Nie możemy zmienić p-wartości gwiazdy.
Ale długa wartość nie jest definiowana jako stała, jest po prostu definiowana jako długa wartość.
Możemy więc nadal modyfikować wskaźnik wartości całkowitej,
ponieważ nie ma zastosowanej stałej.
Zastosowaliśmy tylko stałą do wskaźnika. Możemy więc powiedzieć, że wartość wynosi 777l.
Wskazana wartość uległa zmianie, ale nie został użyty wskaźnik do wprowadzenia zmiany.
Sam wskaźnik również nie jest stałą.
Wskaźnik zapamiętywania zawiera adres.
Nie zadeklarowaliśmy wskaźnika jako stałej. Więc nadal możemy to
To, na co wskazuje wskaźnik, jest stałe. zmienić. Jeśli zadeklarowaliśmy nową zmienną o nazwie liczba, możemy powiedzieć,
że wartość p równa się adresowi tej liczby.
To doskonale, ponieważ zmieniamy adres wartości wskaźnika.
Nie zmieniamy wartości tego, na co wskazywał wskaźnik.
Zrozum więc to rozróżnienie, albo zmieniając wartość
wskaźnika, który jest
tylko adresem, albo zmieniając to, na co wskazuje wskaźnik.
Jeśli nie chcesz zmieniać tego, na
co wskazuje wskaźnik, const musi być tym pierwszym słowem kluczowym w deklaracji samego wskaźnika.
W tym przykładzie ponownie zmienimy adres przechowywany w wartości p, aby wskazywał na liczbę.
Nadal nie możemy użyć wskaźnika do zmiany wartości, która jest przechowywana, ponieważ została
zadeklarowana, ponieważ nie możemy zmienić tej wartości.
Możesz dowolnie zmieniać adres przechowywany we wskaźniku, tak jak my.
Użycie wskaźnika do zmiany wskazanej wartości jest niedozwolone
nawet po zmianie adresu przechowywanego we wskaźniku.
Więc mimo że zmieniliśmy to właśnie
na długą liczbę, wskaźnik nadal miał stałą jako słowo kluczowe.
Nie możemy więc zmienić wartości bez względu na to, na co wskazuje wskaźnik.
A co z niedopuszczaniem do zmiany adresu
wskaźnika, wartości znajdującej się we wskaźniku.
Możesz więc również chcieć upewnić się, że adresu przechowywanego we wskaźniku nie można zmienić.
Możesz to zrobić, używając stałego słowa kluczowego w deklaracji
wskaźnika w ten sam sposób, ale jest to nieco inne.
Zamiast mieć const jako pierwsze słowo
kluczowe, umieszczasz je po typie danych i gwiazdce.
Oznacza to, że sam wskaźnik nie może zmienić swojej wartości.
Jeśli umieścisz go przed int, mówisz, że wartość wskazywana przez wskaźnik nie może się zmienić.
Kiedy to robisz, zapewnia to, że wskaźnik zawsze wskazuje to samo.
Adres nigdy się nie zmieni.
Kompilator sprawdzi, czy próba
zmiany wskaźnika w innym miejscu w kodzie nie została odwrócona.
Nie możesz zmienić tego adresu.
Więc jeśli spróbujesz powiedzieć, że liczba p równa się i element, pojawi się błąd.
Ponieważ może to zawsze wskazywać na adres zliczania.
Chodzi o to, gdzie umieścić stałe słowo kluczowe, jeśli chcesz zmienić.
Jeśli nie chcesz pozwolić na zmianę wskaźnika do wskaźnika lub
jeśli nie zezwalasz na zmianę adresu wskaźnika.
Stała jako pierwsze słowo kluczowe nie pozwala na zmianę wartości wskazujących wskaźników.
Jeśli umieścisz stałą po typie danych w gwiazdce, oznacza to, że
adres wskaźnika nie może się zmienić.
Więc to dużo do zrobienia i to bardzo zagmatwane, więc przestudiuj to, co właśnie powiedziałem.
Zrozum, że składnia jest bardzo ważna
i bardzo skomplikowana. Taki błąd można bardzo
łatwo popełnić. Więc zrozum różnicę.
Nadal możesz zmienić wartość,
w której p liczy punkty, na używając licznika p, tak jak mogliśmy w poprzednim. Ponieważ liczba p to, mimo że przypisujemy,
nie możemy przypisać nowego
adresu, nadal możemy zmienić wskazaną wartość.
Więc możemy go usunąć i zmienić w ten sposób. Możemy powiedzieć, że liczba gwiazd p wynosi 345, w porządku.
Odwołuje się do wartości przechowywanej w count za pomocą wskaźnika i zmienia wartość na 345.
Możesz utworzyć stały wskaźnik, który wskazuje na wartość, która jest również
stałą, więc możesz zrobić coś takiego, stała w gwiazdce,
stała pozycja p.
Oznacza to, że to, na co wskazuje wartość,
jest stałe, a sam wskaźnik jest stałą.
Więc pozycja p jest stałym wskaźnikiem do stałej, więc wszystko jest ustalone.
Nie możesz zmienić adresu zapisanego w elemencie p i nie możesz użyć
elementu p do zmiany tego, na co wskazuje.
Jednak nadal możesz zmienić przedmiot.
Pozycja nie jest stałą, więc możesz ją zmienić.
Możesz zmienić wartość bezpośrednio.
Jeśli chcesz mieć pewność, że nic się nie zmieniło,
musiałbyś faktycznie utworzyć zmienną item int również jako stałą.
A to by powiedziało, że to się nigdy nie zmieni.
Ale pamiętaj o różnicy między
stałymi wskaźnikami a stałymi wartościami, na które wskazuje wskaźnik.
Możesz używać obu. Możesz użyć jednego lub drugiego.
Jeśli chcesz mieć pewność,
że wszystko jest stałe, upewnij się, co wskazujesz na tę zmienną, która również jest stała. Dziękuję Ci.