﻿1
00:00:04,370 --> 00:00:05,510
‫Ciao e Benvenuto.

2
00:00:05,510 --> 00:00:12,020
‫In questa lezione impareremo i riferimenti e le alternative ai puntatori e vedremo perché sono

3
00:00:12,020 --> 00:00:14,600
‫diversi, perché potremmo volerli usare.

4
00:00:14,870 --> 00:00:16,100
‫Immergiamoci e vediamo.

5
00:00:17,280 --> 00:00:22,980
‫Quindi, oltre ai puntatori, esiste un concetto correlato molto simile chiamato riferimento.

6
00:00:23,340 --> 00:00:28,920
‫Ora sia i puntatori che i riferimenti sono essenzialmente solo un indirizzo di memoria.

7
00:00:28,930 --> 00:00:36,420
‫Entrambi memorizzano un riferimento a dove è possibile trovare un'altra variabile e in questo modo sono incredibilmente

8
00:00:36,420 --> 00:00:37,020
‫simili.

9
00:00:37,260 --> 00:00:43,080
‫La differenza tra i due sta sostanzialmente nel fatto che possono essere riassegnati.

10
00:00:43,090 --> 00:00:48,420
‫Fondamentalmente, possono puntare a un indirizzo diverso dopo che sono stati creati per la prima volta?

11
00:00:48,780 --> 00:00:51,270
‫Nel caso di un puntatore, la risposta è sì.

12
00:00:51,630 --> 00:00:57,600
‫Puoi cambiare un puntatore in modo che punti a un nuovo indirizzo di memoria, un nuovo attore, un nuovo componente ogni volta

13
00:00:57,600 --> 00:00:59,610
‫che vuoi, purché abbia il tipo giusto.

14
00:01:00,180 --> 00:01:06,360
‫Un riferimento, d'altra parte, può essere impostato solo una volta quando lo si crea per la prima volta per puntare a un'altra

15
00:01:06,360 --> 00:01:06,870
‫variabile.

16
00:01:07,200 --> 00:01:09,240
‫Non può quindi essere cambiato di nuovo.

17
00:01:09,540 --> 00:01:16,230
‫E questa è una funzione di sicurezza perché il repointing delle variabili può portare a problemi in cui

18
00:01:16,230 --> 00:01:21,210
‫tali variabili potrebbero scomparire o in cui si imposta quel puntatore su null.

19
00:01:21,480 --> 00:01:27,990
‫Un puntatore nullo è essenzialmente un puntatore che non punta a nulla e provare a fare cose con un punto che non imposta

20
00:01:27,990 --> 00:01:35,010
‫su nulla può effettivamente mandare in crash il tuo motore, il che non è un risultato ideale con i riferimenti perché devi dare loro un valore

21
00:01:35,010 --> 00:01:37,140
‫quando crei per la prima volta loro.

22
00:01:37,500 --> 00:01:41,490
‫Non possono essere nulli, quindi non è possibile ottenere questi arresti anomali del puntatore nullo.

23
00:01:42,030 --> 00:01:45,520
‫Quindi iniziamo a dare un'occhiata ad alcune delle sintassi coinvolte.

24
00:01:45,720 --> 00:01:50,850
‫Quindi, quando accedi al contenuto con un puntatore, devi usare una sintassi speciale.

25
00:01:50,850 --> 00:01:55,860
‫Devi mettere questa stella davanti al puntatore per assicurarti di ottenere il valore nel puntatore, non l'indirizzo

26
00:01:55,860 --> 00:02:01,050
‫di memoria con i riferimenti perché non hai mai davvero bisogno di entrare in possesso dell'indirizzo di memoria.

27
00:02:01,260 --> 00:02:06,200
‫Puoi semplicemente usare la variabile come se fosse la variabile a cui punta.

28
00:02:06,210 --> 00:02:08,190
‫Non è necessario utilizzare alcuna sintassi speciale.

29
00:02:08,910 --> 00:02:15,180
‫Ora c'è l'accesso all'indirizzo, quindi con i puntatori si ottiene automaticamente l'indirizzo.

30
00:02:15,480 --> 00:02:18,690
‫Quando usi la variabile con un riferimento, devi usare una sintassi speciale.

31
00:02:18,690 --> 00:02:24,450
‫Per fare ciò, devi usare l'indirizzo dell'operatore e ti otterrà praticamente lo stesso

32
00:02:24,450 --> 00:02:26,430
‫indirizzo della variabile originale.

33
00:02:27,270 --> 00:02:30,690
‫E poi c'è la modifica dell'indirizzo con un puntatore.

34
00:02:30,690 --> 00:02:35,790
‫Abbiamo visto che puoi assegnare l'indirizzo e utilizzare l'indirizzo di opera per farlo con i riferimenti.

35
00:02:35,800 --> 00:02:37,890
‫Questo non è consentito, quindi non c'è sintassi per questo.

36
00:02:38,100 --> 00:02:43,800
‫E infine, cosa succede se vogliamo cambiare il valore a cui stiamo puntando, non l'indirizzo, ma

37
00:02:43,800 --> 00:02:45,960
‫il valore effettivo memorizzato a quell'indirizzo?

38
00:02:46,350 --> 00:02:50,730
‫Bene, con i puntatori, devi di nuovo usare una sintassi speciale.

39
00:02:50,730 --> 00:02:53,220
‫Devi mettere quella stella e poi assegnare qualcosa.

40
00:02:53,220 --> 00:03:00,210
‫Quindi il puntatore dell'attore lo assegni di nuovo al puntatore dell'attore protagonista con i riferimenti, poiché non puoi modificare l'indirizzo

41
00:03:00,210 --> 00:03:03,240
‫effettivo, non hai bisogno di alcuna sintassi aggiuntiva.

42
00:03:03,240 --> 00:03:07,170
‫Possiamo eliminare la sintassi extra e fare in modo che il riferimento dell'attore sia uguale.

43
00:03:07,170 --> 00:03:12,690
‫Attore significa che stai sovrascrivendo il valore nella posizione puntata.

44
00:03:12,900 --> 00:03:14,220
‫Quindi è tutto un po' teorico.

45
00:03:14,220 --> 00:03:16,170
‫Facciamo un esempio reale.

46
00:03:16,170 --> 00:03:24,480
‫Quindi, se avessimo un galleggiante che forse stava immagazzinando il danno che ci è stato fatto nel gioco e in cui stiamo immagazzinando il

47
00:03:24,480 --> 00:03:26,610
‫danno attuale è impostato su zero.

48
00:03:26,610 --> 00:03:28,080
‫Nessuno ci ha fatto danni.

49
00:03:28,500 --> 00:03:33,840
‫Ora potremmo voler creare un riferimento a questo invece di copiarlo, potremmo volerlo passare

50
00:03:33,840 --> 00:03:36,690
‫in una funzione, ma senza cambiarlo effettivamente.

51
00:03:37,110 --> 00:03:42,510
‫Il modo in cui possiamo farlo è avere un galleggiante e poi mettere la e commerciale dopo il galleggiante.

52
00:03:42,750 --> 00:03:45,360
‫E la e commerciale dice che questo è un riferimento a un galleggiante.

53
00:03:45,360 --> 00:03:49,410
‫Non è un nuovo float in sé, non alloca memoria float.

54
00:03:49,410 --> 00:03:51,150
‫Alloca solo la memoria del puntatore.

55
00:03:51,630 --> 00:03:56,910
‫E quindi possiamo chiamarlo l'arbitro danneggiato e possiamo impostarlo uguale a danno.

56
00:03:56,910 --> 00:04:00,120
‫Non dobbiamo prendere l'indirizzo o fare qualcosa del genere.

57
00:04:00,450 --> 00:04:04,470
‫Sa automaticamente, beh, questo è un riferimento e questa è una variabile.

58
00:04:04,470 --> 00:04:08,550
‫Quindi quello che stai cercando di fare qui è impostare un riferimento a quella variabile.

59
00:04:08,820 --> 00:04:15,840
‫E abbastanza sicuro, se andiamo e registri, allora possiamo stamparlo come se fosse solo un normale

60
00:04:15,840 --> 00:04:24,120
‫float così possiamo dire danno due punti e poi percentuale F e quindi qui possiamo fare solo un danno di stampa.

61
00:04:24,120 --> 00:04:25,830
‫Ref Non abbiamo bisogno di una sintassi speciale.

62
00:04:25,830 --> 00:04:28,230
‫Possiamo usarlo proprio come una variabile regolare.

63
00:04:28,440 --> 00:04:33,930
‫Andiamo avanti e premiamo play dopo la compilazione, diamo un'occhiata al nostro registro di output e, in effetti, il

64
00:04:33,930 --> 00:04:37,470
‫danno è pari a zero, che era il valore che abbiamo impostato.

65
00:04:37,740 --> 00:04:43,170
‫Ma questo non prova necessariamente che non ho fatto una copia di quella variabile originale, quindi vorrei

66
00:04:43,170 --> 00:04:46,980
‫sfidarti a provare a cambiare il valore e vedere cosa succede.

67
00:04:46,980 --> 00:04:54,030
‫Quindi usa il riferimento, il riferimento al danno, per impostare un nuovo valore e quindi stampa il valore

68
00:04:54,030 --> 00:05:01,260
‫originale in modo che il valore originale accanto al valore di riferimento e dai un'occhiata sono uguali o sono

69
00:05:01,260 --> 00:05:01,740
‫diversi?

70
00:05:01,740 --> 00:05:05,160
‫Cambia solo il riferimento, ma cambia anche l'originale?

71
00:05:05,160 --> 00:05:10,560
‫Perché ciò implicherebbe che sono entrambi la stessa variabile di mettere in pausa il video e provare.

72
00:05:13,850 --> 00:05:14,360
‫Bene.

73
00:05:14,360 --> 00:05:15,060
‫Ben tornato.

74
00:05:15,080 --> 00:05:16,280
‫Quindi diamo una pugnalata.

75
00:05:16,730 --> 00:05:22,280
‫Quindi, per cambiare il riferimento ora, faremo danni ref equals.

76
00:05:22,280 --> 00:05:27,290
‫E questa volta dirò cosa abbiamo fatto cinque danni e questo è che non ho dovuto usare nessuna sintassi speciale

77
00:05:27,290 --> 00:05:27,580
‫qui.

78
00:05:27,590 --> 00:05:33,080
‫Non sta ripuntando il riferimento perché lo abbiamo già dichiarato e impostato il suo riferimento su quella prima

79
00:05:33,080 --> 00:05:34,580
‫riga quando viene creato.

80
00:05:34,820 --> 00:05:36,170
‫Non possiamo farlo di nuovo.

81
00:05:36,320 --> 00:05:38,870
‫Quindi ora possiamo semplicemente impostare il valore.

82
00:05:39,470 --> 00:05:45,830
‫Quindi quello che posso fare ora è che abbiamo il riferimento del danno è qui nel registro.

83
00:05:46,070 --> 00:05:56,510
‫Mettiamo anche un danno e una percentuale f su quella stessa stringa e poi passiamo anche il danno qui.

84
00:05:57,650 --> 00:06:00,410
‫E poi compileremo e daremo un'occhiata.

85
00:06:00,740 --> 00:06:08,480
‫Premiamo play, entriamo nel nostro registro di output e, abbastanza sicuro, sta stampando il riferimento del danno e il danno poiché entrambi hanno

86
00:06:08,480 --> 00:06:12,200
‫il nuovo valore che abbiamo impostato il valore di cinque.

87
00:06:12,380 --> 00:06:18,650
‫Quindi, in sostanza, ciò che abbiamo qui sono due variabili che puntano allo stesso pezzo di memoria.

88
00:06:18,650 --> 00:06:22,130
‫Si potrebbe quasi dire che sono tutte la stessa variabile, ma con nomi diversi.

89
00:06:22,430 --> 00:06:28,580
‫Quindi questo ha il vantaggio di non aver bisogno di una copia, proprio come un puntatore, ma ha anche molti più vantaggi

90
00:06:28,580 --> 00:06:30,710
‫perché è molto più facile da usare.

91
00:06:30,710 --> 00:06:33,650
‫Non abbiamo bisogno di tutta quella sintassi extra ed è anche più sicuro da usare.

92
00:06:33,650 --> 00:06:39,140
‫Quindi, fintanto che non è necessario ridipingere nulla, è generalmente preferibile utilizzare i riferimenti.

93
00:06:39,320 --> 00:06:44,780
‫Ora facciamo una rapida rassegna di alcuni dei simboli che usiamo qui perché possono creare un po' di confusione.

94
00:06:44,780 --> 00:06:47,210
‫Sono usati molto in C++.

95
00:06:47,210 --> 00:06:52,250
‫Quindi i simboli della e commerciale e delle stelle, diamo un'occhiata al loro contesto e al loro significato.

96
00:06:52,910 --> 00:06:59,990
‫Quindi, quando li utilizziamo, quindi quando li utilizziamo in un'espressione, ecco alcuni esempi di codice.

97
00:06:59,990 --> 00:07:03,560
‫Potresti vedere la stella prima di una variabile.

98
00:07:03,560 --> 00:07:06,140
‫Potresti vedere la e commerciale prima di una variabile.

99
00:07:06,530 --> 00:07:07,370
‫Cosa significa questo?

100
00:07:08,240 --> 00:07:15,920
‫Bene, con il simbolo della stella, la sintassi di metterlo prima della variabile significa che ora stiamo

101
00:07:16,280 --> 00:07:20,900
‫ottenendo i contenuti al puntatore dell'attore con la e commerciale.

102
00:07:20,930 --> 00:07:25,880
‫Se metti la e commerciale davanti a una variabile o davanti a un riferimento a una

103
00:07:25,880 --> 00:07:28,880
‫variabile, significa che sta ottenendo l'indirizzo di quella variabile.

104
00:07:28,880 --> 00:07:32,450
‫Sta ottenendo l'indirizzo dell'attore o l'indirizzo indicato dal riferimento.

105
00:07:32,780 --> 00:07:37,550
‫Ora, quando dichiariamo che lo stiamo usando, termina il tipo di una variabile.

106
00:07:37,760 --> 00:07:41,150
‫Le stelle e la e commerciale hanno quasi i significati opposti.

107
00:07:41,570 --> 00:07:51,050
‫Quindi la stella significa che questo è un indicatore di un nuovo attore e la e commerciale significa che questo è un riferimento

108
00:07:51,050 --> 00:07:52,370
‫al tuo attore.

109
00:07:52,640 --> 00:07:57,350
‫Quindi ricorda solo che esiste un insieme di significati completamente diverso, sia che tu

110
00:07:57,350 --> 00:08:03,320
‫li stia usando con una variabile in un'espressione, sia che tu li stia usando nel tipo che dichiara una variabile.

111
00:08:03,560 --> 00:08:08,270
‫Ora, non entrerò troppo nei dettagli, ma per aggiungere la beffa al danno, questi possono effettivamente avere altri

112
00:08:08,270 --> 00:08:08,750
‫significati.

113
00:08:08,750 --> 00:08:15,140
‫In un altro contesto, la e commerciale può significare un po' di saggezza e la stella, come abbiamo già visto, può

114
00:08:15,140 --> 00:08:17,780
‫essere usata con le stringhe nel log U.

115
00:08:18,050 --> 00:08:22,550
‫Quindi questi non sono necessariamente tutti i significati di questi due simboli, ma sono praticamente

116
00:08:22,550 --> 00:08:26,360
‫tutti i significati importanti che si riferiscono a puntatori e riferimenti.

117
00:08:26,660 --> 00:08:27,290
‫Roba fantastica.

118
00:08:27,290 --> 00:08:32,300
‫Quindi abbiamo imparato a conoscere i puntatori, i riferimenti, come si relazionano tra loro, come sono diversi

119
00:08:32,540 --> 00:08:34,400
‫e perché potremmo volerli usare.

120
00:08:34,430 --> 00:08:35,900
‫Ci vediamo alla prossima lezione.

