Ciao e bentornato. In questa lezione, voglio fornire una dimostrazione
per la nostra sfida precedente che era
la comprensione passo per riferimento, avendo
un parametro all'interno di una funzione che prende un puntatore.
Quindi creiamo un nuovo progetto. Chiameremo questo passaggio un
puntatore per riferimento perché è quello che sta dimostrando,
cose di base qui, nuovo progetto,
applicazione console c. Abbastanza semplice qui.
Chiamiamo semplicemente questo punto di sottolineatura
passaggio per riferimento.
Ancora una volta, dimostrando come possiamo usare i parametri all'interno di una funzione per
passare i dati e come quei dati verranno poi modificati
al di fuori della funzione.
Quindi la prima cosa che faremo è creare la nostra dichiarazione di funzione, il
nostro prototipo di funzione. Questo è sempre bello da
fare in modo da poter chiamare ovunque nel tuo programma. Lo chiameremo semplicemente quadrato.
La cosa principale in questa dichiarazione di funzione è che prenderà un puntatore.
Quindi ci vorrà solo un puntatore di fine, quindi diremo int star
e poi puoi dargli il nome che vuoi e terminarlo con il punto e virgola.
E la nostra funzione
principale, la prima cosa che faremo è creare una normale
variabile intera e diremo solo int num e diremo solo hard code a 9.
E quello che faremo è chiamare la nostra funzione quadrata.
La nostra funzione quadrata non restituirà alcun dato, sarà nulla.
Ora dobbiamo passargli un indirizzo perché la nostra funzione quadrata sulla riga 4 sta prendendo un puntatore.
Quindi non possiamo passare un num, dovremmo effettivamente passare l'indirizzo di num, e poi
lo termineremo con un punto e virgola. Quindi chiamiamo la funzione utilizzando
il nome della funzione e quindi passando l'indirizzo della variabile.
Perché la variabile qui in una riga otto non è un puntatore.
Quindi possiamo semplicemente stampare il valore di num.
E ancora, ciò che noterai qui è perché stiamo passando
l'indirizzo, se cambiamo i dati nella funzione stessa per quella variabile, cambierà
al di fuori di essa. Quindi qui diremo che
il quadrato del numero dato è ed è solo per
cento d, aggiungeremo un avanzamento
riga e stamperemo solo num, e num non
sarà 9. , Te lo dirò molto.
E poi restituiremo solo 0 per la nostra funzione normale.
Quindi ora dobbiamo implementare effettivamente la funzione, definirla.
Per definirlo, dirò solo void square.
Sappiamo che richiede un puntatore intero, quindi dirò int star x.
E ora vogliamo solo moltiplicarlo per se stesso.
Ma vogliamo assicurarci di non modificare l'indirizzo.
Quindi quello che potremmo fare qui è che potremmo renderlo una costante, ma
vorresti mettere la costante dopo il tipo
di dati perché non vogliamo cambiare il valore di
ciò che è x o l'indirizzo di ciò a cui punta così potremmo dire int costante.
Se non volessimo cambiare il valore
di x, diremmo costante. Ma vogliamo cambiare il valore di x, lo quadreremo da solo.
Quindi, per quadrare da solo, prima di tutto, ciò che vogliamo
cambiare è il valore finale di x. Quindi dobbiamo usare l'operatore
di riferimento indiretto. Dobbiamo de-referenziarlo con l'asterisco.
E poi diremo solo uguale, non vogliamo fare
x volte x perché questo moltiplicherà solo gli indirizzi. X è un puntatore, non vogliamo solo ottenere il
valore di x, vogliamo ottenere il valore di ciò a cui x sta puntando.
Quindi di nuovo, dobbiamo de-referenziarlo e poi
lo moltiplicheremo per se stesso. Lo de-referenzeremo due volte.
Potrebbe essere una buona idea
metterlo tra parentesi così è molto facile capire cosa sta succedendo qui.
Stai de-referenziando il puntatore, ottenendo il valore di esso e quindi moltiplicando
per il suo valore e quindi aggiungi semplicemente il punto e virgola, e
questo è tutto ciò che devi fare. Quindi, quando eseguiamo questo programma,
stamperà 81.
Stamperà il valore di num. Num cambierà all'interno del riquadro perché
stiamo passando l'indirizzo lì.
Non siamo in grado di modificare effettivamente il valore del puntatore,
quindi abbiamo la costante dopo il tipo.
Quindi qui diciamo build e sembra che
non abbiamo modificato la dichiarazione.
E ora vogliamo solo assicurarci che tutto
il resto sia corretto.
Se vuoi che il puntatore sia
costante, devi metterlo dopo l'asterisco.
Quindi int start costante significa
che non puoi cambiare il valore di
x, che è l'indirizzo di num.
Se mettiamo const prima dell'int o
dopo l'input prima dell'asterisco, significa che non
puoi cambiare il valore di ciò a cui punta il puntatore.
Quindi ora, quando eseguiamo questo, dovremmo vedere come output 81.
Ancora una volta, ciò
che ci dice è che abbiamo modificato i
dati. Questa variabile, questa
variabile locale num è stata modificata all'interno della funzione e il suo valore è cambiato.
Non è normale. Non abbiamo imparato questo concetto fino ad ora. È passato per riferimento.
Ma in c quello che sta succedendo è che stai passando una copia dell'indirizzo.
Ecco perché è davvero ridondante, non abbiamo nemmeno bisogno della costante perché anche
se dovessimo cambiare il valore del puntatore, è
una copia del valore del puntatore, quindi non è davvero necessario farlo.
Ora, se non volessimo usare un numero esistente, potremmo creare un puntatore,
dobbiamo solo allocare memoria per esso.
Quindi quello che dovremmo fare qui è che potremmo creare un int star num.
Ma quello che dovremmo fare è prima che dovremmo lanciare il malloc
perché malloc torna con un puntatore void
ma possiamo allocare la memoria in modo dinamico.
E qui, dovremmo dire in realtà
solo perché stiamo creando un intero, potremmo semplicemente dire la dimensione
di int e questo allocherebbe memoria per noi.
E poi, tutto quello che dovremmo fare è passare al quadrato num.
E poi
quando lo costruiamo, farebbe la stessa
cosa ma ora non ha nemmeno
un valore per num,
quindi non saprei effettivamente cosa calcolare, quindi
dovresti effettivamente assegnare il valore di num
diremo qui quattro, lo de-referenziarlo. E poi ora quando lo costruisci e
lo esegui, dovresti ottenere 16.
Ora l'unica cosa qui è che vogliamo stampare il valore, quindi vogliamo dire num.
E poi quando lo eseguiamo, dovremmo vedere 16.
Ed è proprio lo stesso tipo di
comportamento, e ne vediamo 16.
L'unica differenza qui era che stavamo allocando la memoria
per ciò a cui punta il punto invece di puntare semplicemente a una posizione
di memoria esistente con e commerciale.
Ancora una volta, cose importanti da notare qui, questo numero sta cambiando al
di fuori della funzione. Questo è
passato per riferimento capire. Dove stiamo usando l'operatore di de-riferimento, l'operatore di
riferimento indiretto per ottenere il valore di ciò a cui punta il punto.
Comprendi che se la funzione accetta un puntatore e abbiamo
un puntatore, possiamo semplicemente inviare il nome.
Se non sta prendendo un
puntatore ed è effettivamente un valore,
allora dobbiamo de-referenziarlo. E questo è proprio come lo scanf.
Quindi qui dovremmo dire la e commerciale.
E poi anche quando lo stampiamo, non
dovremmo de-referenziare nulla perché non è un puntatore e quindi
sarebbe la stessa cosa qui.
E poi capire const due. Const prima della stella int sta dicendo
che il valore a cui punta il punto non può cambiare.
Il const dopo l'inizio di int sta dicendo che l'indirizzo del puntatore non può, modificare il valore del puntatore.
Spero che questo sia stato utile.
Ancora una volta, gioca con questo, cambia un po 'di sintassi, scherza come ho fatto io.
Ti aiuterà a imparare molto. Grazie.