﻿1
00:00:04,370 --> 00:00:05,510
‫Cześć i witaj.

2
00:00:05,510 --> 00:00:12,020
‫Na tym wykładzie nauczymy się o referencjach i alternatywach dla wskaźników, a także zobaczymy, dlaczego są

3
00:00:12,020 --> 00:00:14,600
‫różne, dlaczego możemy chcieć ich używać.

4
00:00:14,870 --> 00:00:16,100
‫Zanurzmy się i zobaczmy.

5
00:00:17,280 --> 00:00:22,980
‫Tak więc, oprócz wskaźników, istnieje bardzo podobna, powiązana koncepcja, nazywana referencją.

6
00:00:23,340 --> 00:00:28,920
‫Teraz zarówno wskaźniki, jak i referencje są w zasadzie tylko adresem pamięci.

7
00:00:28,930 --> 00:00:36,420
‫Oba przechowują odniesienie do miejsca, w którym można znaleźć inną zmienną, i w ten sposób są niewiarygodnie

8
00:00:36,420 --> 00:00:37,020
‫podobne.

9
00:00:37,260 --> 00:00:43,080
‫Różnica między nimi sprowadza się zasadniczo do tego, czy można je ponownie przypisać.

10
00:00:43,090 --> 00:00:48,420
‫Zasadniczo, czy mogą wskazywać inny adres po utworzeniu?

11
00:00:48,780 --> 00:00:51,270
‫W przypadku wskaźnika odpowiedź brzmi tak.

12
00:00:51,630 --> 00:00:57,600
‫Możesz zmienić wskaźnik, aby wskazywał na nowy adres pamięci, nowego aktora, nowy komponent, kiedy tylko chcesz,

13
00:00:57,600 --> 00:00:59,610
‫o ile ma właściwy typ.

14
00:01:00,180 --> 00:01:06,360
‫Z drugiej strony odwołanie można ustawić tylko raz, kiedy tworzysz je po raz pierwszy, aby wskazywało na inną

15
00:01:06,360 --> 00:01:06,870
‫zmienną.

16
00:01:07,200 --> 00:01:09,240
‫Nie można go wtedy ponownie zmienić.

17
00:01:09,540 --> 00:01:16,230
‫Jest to funkcja bezpieczeństwa, ponieważ ponowne wskazywanie zmiennych może prowadzić do problemów, w których

18
00:01:16,230 --> 00:01:21,210
‫te zmienne mogą zniknąć lub gdy ustawisz wskaźnik na null.

19
00:01:21,480 --> 00:01:27,990
‫Pusty wskaźnik jest zasadniczo wskaźnikiem, który nie wskazuje nic, a próba zrobienia rzeczy z punktami, które są ustawione

20
00:01:27,990 --> 00:01:35,010
‫na nic, może w rzeczywistości spowodować awarię silnika, co nie jest idealnym wynikiem z odwołaniami, ponieważ musisz nadać im

21
00:01:35,010 --> 00:01:37,140
‫wartość podczas pierwszego tworzenia ich.

22
00:01:37,500 --> 00:01:41,490
‫Nie mogą mieć wartości null, więc nie można uzyskać awarii wskaźnika zerowego.

23
00:01:42,030 --> 00:01:45,520
‫Więc zacznijmy przyglądać się składni.

24
00:01:45,720 --> 00:01:50,850
‫Więc kiedy uzyskujesz dostęp do treści za pomocą wskaźnika, musisz użyć specjalnej składni.

25
00:01:50,850 --> 00:01:55,860
‫Musisz umieścić tę gwiazdkę przed wskaźnikiem, aby upewnić się, że otrzymujesz wartość we wskaźniku,

26
00:01:55,860 --> 00:02:01,050
‫a nie adres pamięci z referencjami, ponieważ tak naprawdę nigdy nie musisz uzyskać adresu pamięci.

27
00:02:01,260 --> 00:02:06,200
‫Możesz po prostu użyć zmiennej tak, jakby była zmienną, na którą wskazuje.

28
00:02:06,210 --> 00:02:08,190
‫Nie musisz używać żadnej specjalnej składni.

29
00:02:08,910 --> 00:02:15,180
‫Teraz jest dostęp do adresu, więc za pomocą wskaźników uzyskujesz adres automatycznie.

30
00:02:15,480 --> 00:02:18,690
‫Kiedy używasz zmiennej z referencją, musisz użyć specjalnej składni.

31
00:02:18,690 --> 00:02:24,450
‫Aby to zrobić, musisz użyć adresu operatora, a uzyskasz w zasadzie ten sam

32
00:02:24,450 --> 00:02:26,430
‫adres, co oryginalna zmienna.

33
00:02:27,270 --> 00:02:30,690
‫A potem zmiana adresu za pomocą wskaźnika.

34
00:02:30,690 --> 00:02:35,790
‫Widzieliśmy, że możesz przypisać adres i użyć adresu operacji, aby zrobić to z referencjami.

35
00:02:35,800 --> 00:02:37,890
‫Nie jest to dozwolone, więc nie ma na to składni.

36
00:02:38,100 --> 00:02:43,800
‫I na koniec, co jeśli chcemy zmienić wartość, na którą wskazujemy, nie adres, ale rzeczywistą

37
00:02:43,800 --> 00:02:45,960
‫wartość przechowywaną pod tym adresem?

38
00:02:46,350 --> 00:02:50,730
‫Cóż, ze wskaźnikami musisz ponownie użyć specjalnej składni.

39
00:02:50,730 --> 00:02:53,220
‫Musisz umieścić tę gwiazdę, a potem coś przypisać.

40
00:02:53,220 --> 00:03:00,210
‫Tak więc wskaźnik aktora, który przypisujesz do wskaźnika aktora gwiazdy z referencjami, ponownie, ponieważ nie możesz zmienić

41
00:03:00,210 --> 00:03:03,240
‫faktycznego adresu, nie potrzebujesz żadnej dodatkowej składni.

42
00:03:03,240 --> 00:03:07,170
‫Możemy porzucić dodatkową składnię i po prostu mieć odwołanie do aktora równe.

43
00:03:07,170 --> 00:03:12,690
‫Aktor oznacza, że nadpisujesz wartość we wskazanej lokalizacji.

44
00:03:12,900 --> 00:03:14,220
‫Więc to wszystko jest trochę teoretyczne.

45
00:03:14,220 --> 00:03:16,170
‫Miejmy rzeczywisty przykład.

46
00:03:16,170 --> 00:03:24,480
‫Więc gdybyśmy mieli pływak, który być może przechowywał obrażenia wyrządzone nam w grze, a my przechowujemy, bieżące obrażenia

47
00:03:24,480 --> 00:03:26,610
‫są ustawione na zero.

48
00:03:26,610 --> 00:03:28,080
‫Nikt nas nie skrzywdził.

49
00:03:28,500 --> 00:03:33,840
‫Teraz możemy chcieć utworzyć odwołanie do tego, zamiast kopiować, możemy chcieć przekazać to

50
00:03:33,840 --> 00:03:36,690
‫do funkcji, ale bez faktycznej zmiany.

51
00:03:37,110 --> 00:03:42,510
‫Sposób, w jaki możemy to zrobić, to mieć pływak, a następnie umieścić znak ampersand za pływakiem.

52
00:03:42,750 --> 00:03:45,360
‫Znak & mówi, że jest to odniesienie do pływaka.

53
00:03:45,360 --> 00:03:49,410
‫Sam w sobie nie jest nowym floatem, nie przydziela żadnej pamięci float.

54
00:03:49,410 --> 00:03:51,150
‫Po prostu przydziela pamięć wskaźnika.

55
00:03:51,630 --> 00:03:56,910
‫A więc możemy to nazwać uszkodzonym ref i możemy ustawić to jako uszkodzenie.

56
00:03:56,910 --> 00:04:00,120
‫Nie musimy podawać adresu ani robić niczego takiego.

57
00:04:00,450 --> 00:04:04,470
‫Automatycznie wie, cóż, to jest odwołanie, a to jest zmienna.

58
00:04:04,470 --> 00:04:08,550
‫Więc to, co próbujesz tutaj zrobić, to ustawić referencję do tej zmiennej.

59
00:04:08,820 --> 00:04:15,840
‫I rzeczywiście, jeśli pójdziemy i zarejestrujemy, możemy wydrukować to tak, jakby to była zwykła

60
00:04:15,840 --> 00:04:24,120
‫liczba zmiennoprzecinkowa, więc możemy powiedzieć uszkodzenie dwukropka, a następnie procent F, a następnie możemy zrobić tylko uszkodzenie wydruku.

61
00:04:24,120 --> 00:04:25,830
‫Ref Nie potrzebujemy specjalnej składni.

62
00:04:25,830 --> 00:04:28,230
‫Możemy go używać jak zwykłej zmiennej.

63
00:04:28,440 --> 00:04:33,930
‫Przejdźmy dalej i po kompilacji wciśnijmy play, spójrzmy na nasz dziennik wyjściowy i rzeczywiście,

64
00:04:33,930 --> 00:04:37,470
‫obrażenia wychodzą na zero, co było wartością, którą ustaliliśmy.

65
00:04:37,740 --> 00:04:43,170
‫Ale to niekoniecznie dowodzi, że nie zrobiłem kopii tej oryginalnej zmiennej, więc chciałbym rzucić wyzwanie,

66
00:04:43,170 --> 00:04:46,980
‫abyś spróbował zmienić wartość i zobaczyć, co się stanie.

67
00:04:46,980 --> 00:04:54,030
‫Więc użyj odniesienia, odniesienia do uszkodzenia, aby ustawić nową wartość, a następnie wydrukuj

68
00:04:54,030 --> 00:05:01,740
‫oryginalną wartość, aby pierwotna wartość obok wartości odniesienia i spójrz, czy są takie same, czy różne?

69
00:05:01,740 --> 00:05:05,160
‫Zmieniasz tylko odniesienie, ale czy zmienia to również oryginał?

70
00:05:05,160 --> 00:05:10,560
‫Ponieważ oznaczałoby to, że oba są tą samą zmienną, wstrzymują wideo i próbują.

71
00:05:13,850 --> 00:05:14,360
‫Dobra.

72
00:05:14,360 --> 00:05:15,060
‫Witamy spowrotem.

73
00:05:15,080 --> 00:05:16,280
‫Więc dajmy to dźgnąć.

74
00:05:16,730 --> 00:05:22,280
‫Aby zmienić teraz odniesienie, zrobimy obrażenia ref równe.

75
00:05:22,280 --> 00:05:27,580
‫I tym razem powiem, że zadaliśmy pięć obrażeń i nie musiałem tutaj używać żadnej specjalnej składni.

76
00:05:27,590 --> 00:05:33,080
‫Nie wskazuje na odwołanie, ponieważ już je zadeklarowaliśmy i ustawiliśmy jego odwołanie w pierwszym wierszu,

77
00:05:33,080 --> 00:05:34,580
‫kiedy jest tworzone.

78
00:05:34,820 --> 00:05:36,170
‫Nie możemy tego zrobić ponownie.

79
00:05:36,320 --> 00:05:38,870
‫Więc teraz możemy po prostu ustawiać wartość.

80
00:05:39,470 --> 00:05:45,830
‫Więc co mogę teraz zrobić, to ref uszkodzeń jest tutaj w dzienniku.

81
00:05:46,070 --> 00:05:56,510
‫Załóżmy też, że ta sama struna jest uszkodzona i procent f, a następnie podajmy to również tutaj.

82
00:05:57,650 --> 00:06:00,410
‫A potem skompilujemy i przyjrzymy się.

83
00:06:00,740 --> 00:06:08,480
‫Zagrajmy, wejdźmy do naszego dziennika wyjściowego i na pewno wyświetla obrażenia ref i obrażenia, ponieważ oba

84
00:06:08,480 --> 00:06:12,200
‫mają nową wartość, którą ustawiliśmy na pięć.

85
00:06:12,380 --> 00:06:18,650
‫W skrócie, mamy tutaj dwie zmienne, które wskazują na ten sam fragment pamięci.

86
00:06:18,650 --> 00:06:22,130
‫Można prawie powiedzieć, że wszystkie są tą samą zmienną, ale mają różne nazwy.

87
00:06:22,430 --> 00:06:28,580
‫Ma to tę zaletę, że nie potrzebuje kopii, podobnie jak wskaźnik, ale ma też znacznie więcej zalet, ponieważ

88
00:06:28,580 --> 00:06:30,710
‫jest o wiele łatwiejszy w użyciu.

89
00:06:30,710 --> 00:06:33,650
‫Nie potrzebujemy całej tej dodatkowej składni i jest ona bezpieczniejsza w użyciu.

90
00:06:33,650 --> 00:06:39,140
‫Tak więc, o ile nie musimy niczego przemalowywać, generalnie preferowane jest używanie odwołań.

91
00:06:39,320 --> 00:06:44,780
‫Zróbmy teraz krótki przegląd niektórych symboli, których tutaj używamy, ponieważ mogą być nieco mylące.

92
00:06:44,780 --> 00:06:47,210
‫Są często używane w C++.

93
00:06:47,210 --> 00:06:52,250
‫Więc ampersand i symbole gwiazdy, spójrzmy na nie w kontekście i co one oznaczają.

94
00:06:52,910 --> 00:06:59,990
‫Więc kiedy ich używamy, a więc kiedy używamy ich w wyrażeniu, oto kilka przykładów kodu.

95
00:06:59,990 --> 00:07:03,560
‫Możesz zobaczyć gwiazdę przed zmienną.

96
00:07:03,560 --> 00:07:06,140
‫Możesz zobaczyć znak & przed zmienną.

97
00:07:06,530 --> 00:07:07,370
‫Co to znaczy?

98
00:07:08,240 --> 00:07:15,920
‫Cóż, w przypadku symbolu gwiazdy, składnia umieszczania go przed zmienną oznacza, że teraz otrzymujemy

99
00:07:16,280 --> 00:07:20,900
‫zawartość wskaźnika aktora za pomocą znaku &.

100
00:07:20,930 --> 00:07:25,880
‫Jeśli umieścisz znak & przed zmienną lub przed odwołaniem do zmiennej, oznacza

101
00:07:25,880 --> 00:07:28,880
‫to, że otrzymuje adres tej zmiennej.

102
00:07:28,880 --> 00:07:32,450
‫Pobiera adres aktora lub adres wskazywany przez odwołanie.

103
00:07:32,780 --> 00:07:37,550
‫Teraz, kiedy deklarujemy, że go używamy, kończymy typ zmiennej.

104
00:07:37,760 --> 00:07:41,150
‫Gwiazdy i ampersand mają prawie przeciwne znaczenia.

105
00:07:41,570 --> 00:07:51,050
‫Gwiazdka oznacza więc, że jest to wskaźnik do nowego aktora, a znak & oznacza, że jest to odniesienie do aktora

106
00:07:51,050 --> 00:07:52,370
‫r u.

107
00:07:52,640 --> 00:07:57,350
‫Więc po prostu pamiętaj, że istnieje zupełnie inny zestaw znaczeń, niezależnie

108
00:07:57,350 --> 00:08:03,320
‫od tego, czy używasz ich ze zmienną w wyrażeniu, czy używasz ich w typie deklarującym zmienną.

109
00:08:03,560 --> 00:08:08,270
‫Teraz nie będę się zagłębiał w szczegóły, ale aby dodać zniewagę do kontuzji, mogą one mieć inne

110
00:08:08,270 --> 00:08:08,750
‫znaczenie.

111
00:08:08,750 --> 00:08:15,140
‫W innym kontekście ampersand może oznaczać trochę mądrze, a gwiazda, jak już widzieliśmy, może być

112
00:08:15,140 --> 00:08:17,780
‫używana z łańcuchami w logu U.

113
00:08:18,050 --> 00:08:22,550
‫Więc niekoniecznie są to wszystkie znaczenia tych dwóch symboli, ale są to

114
00:08:22,550 --> 00:08:26,360
‫właściwie wszystkie ważne znaczenia odnoszące się do wskaźników i referencji.

115
00:08:26,660 --> 00:08:27,290
‫Świetna sprawa.

116
00:08:27,290 --> 00:08:32,300
‫Tak więc dowiedzieliśmy się o wskaźnikach, referencjach, o tym, jak są ze sobą powiązane, czym się różnią

117
00:08:32,540 --> 00:08:34,400
‫i dlaczego możemy chcieć ich używać.

118
00:08:34,430 --> 00:08:35,900
‫Do zobaczenia na następnym wykładzie.

