Ciao e bentornato
In questa conferenza, voglio fornire una dimostrazione della nostra
sfida per l'aritmetica dei puntatori e l'utilizzo del modificatore di costanti.
Visualizziamo i blocchi di codice. Creerò un nuovo progetto. Chiameremo questo esempio
aritmetico con un puntatore.
Quindi quello che faremo qui è determinare
effettivamente la lunghezza di una stringa utilizzando l'aritmetica dei punti.
Quindi la prima cosa che voglio fare è creare la mia dichiarazione di funzione.
Questo restituirà la lunghezza della stringa. Quindi avrà int come
tipo restituito. Lo chiamerò lunghezza della stringa,
e questo prenderà solo un puntatore, ma sarà un puntatore costante.
Non vogliamo cambiare il valore di ciò a cui punta.
Quindi questo significa che useremo la costante come prima parola chiave e
poi specificheremo il tipo, che è un carattere.
E diremmo stella, e possiamo chiamarlo come vogliamo, stringa.
Ancora una volta tanto per ribadire, se avessimo messo la costante qui invece,
questo direbbe che l'indirizzo del puntatore, il valore
del puntatore non può cambiare.
Ma ancora una volta, è un po 'ridondante e non ha davvero bisogno
di essere fatto perché stiamo facendo passare per valore, passare per copia.
Quindi hai comunque una copia dell'indirizzo, quindi non importa se lo cambi lì.
Ma è importante cambiare ciò a cui stai indicando. Se non vuoi che il valore
di ciò che stai puntando a cambiare, sicuramente vuoi farlo costantemente qui, e
questo è importante.
Quindi ora tutto ciò che dobbiamo fare è creare il nostro main.
creare il nostro file principale. Tutto quello che faremo
nel nostro main è chiameremo string length,
una funzione di string length con stringhe differenti.
Quindi stampiamo e ricordiamo che restituisce un numero intero, quindi possiamo dire percento d e stamperemo
solo la lunghezza di un paio di stringhe che passiamo.
Quindi chiameremo la lunghezza della stringa
e passeremo solo alcune stringhe costanti, quindi possiamo semplicemente mettere
le cose tra virgolette qui. Non dobbiamo nemmeno creare puntatori.
Potresti creare un puntatore e assegnarlo e poi passarlo, ma devi
solo assicurarti che sia una costante.
Ma poiché è più facile con meno codice, possiamo semplicemente dire test della lunghezza della stringa.
Di nuovo, è una stringa letterale costante.
Lo testeremo con un po 'di più.
Metteremo uno spazio dopo di esso. Aggiungiamo alcuni avanzamenti di riga.
Qui chiameremo la lunghezza della stringa. E in realtà chiamiamolo con la stringa
vuota, assicurati di impostare zero. E poi
il nostro terzo diremo lunghezza della
stringa, diremo solo jason.
Ora, incidentalmente, quando li crei e passi questi collegamenti di lunghezza
di stringa, viene automaticamente aggiunto il terminatore nullo.
Lo apprendiamo quando dichiariamo i puntatori.
Questo è uno dei vantaggi. Se creerai un puntatore e sarà
un letterale, non vuoi specificare la dimensione.
Vorresti fare qualcosa come il carattere se è un array perché un
array è array è un puntatore. Ma se non
volessimo specificare la dimensione, potremmo dire
il carattere pe poi qui dentro potremmo semplicemente dire jason.
Ricorda quella lezione in cui se non specifichiamo la dimensione per gli array di
caratteri, aggiungerà automaticamente un terminatore nullo e creerà la dimensione per te.
In questo modo non commetti errori. Se metti la dimensione all'interno dell'array,
potresti non avere abbastanza del terminatore nullo.
È la stessa cosa quando passiamo il letterale alla lunghezza della stringa, il
terminatore null viene aggiunto alla fine di esso.
Quindi avremmo potuto creare inizialmente queste
variabili e fare qualcosa di simile e poi
passare in ciascuna di esse.
Ma non volevo perdere tempo a creare variabili. Quindi lo farò.
Ciò che è veramente importante per questo codice è la funzione.
Quindi creeremo la nostra lunghezza della stringa. Ricorda ancora, restituisce un numero intero
e sarà una costante. Quindi possiamo solo dire stringa char star costante.
E noti anche che il nome della variabile di
dichiarazione della funzione non deve corrispondere. Potrei metterlo come stringhe e va bene anche questo.
Ora all'interno di questa funzione, dobbiamo creare un puntatore locale perché il puntatore
locale punterà alla fine della stringa. E poi una volta che abbiamo l'indirizzo
per la fine della stringa, possiamo meno l'indirizzo per l'inizio della stringa.
L'indirizzo per l'inizio della stringa è ciò che è passato.
La stringa punta automaticamente al primo elemento dell'array o
al primo indirizzo dell'array.
Quindi, se creiamo un puntatore locale e
vorremo solo creare di nuovo un'altra stella di
carattere costante e diremo solo l'ultimo indirizzo che ne dici.
E questo sarà uguale all'indirizzo iniziale della stringa, quindi lo
incrementeremo ogni volta nel nostro ciclo.
Quindi ora abbiamo l'ultimo indirizzo. Ancora una volta, questa è una
variabile locale che memorizzerà l'indirizzo subito prima del terminatore null.
Quindi ora possiamo scrivere il nostro ciclo while.
E il nostro ciclo while uscirà quando vedremo il terminatore nullo.
Ora potremmo farlo in due modi diversi.
Potremmo confrontare i personaggi. Quindi potremmo dire qualcosa come
while star last address perché dobbiamo de-referenziarlo non è
uguale a backslash
zero potrebbe fare qualcosa del genere, ma è
una specie di molto codice. Tutto quello che dobbiamo fare
è solo dire
mentre reciti all'ultimo indirizzo. Perché se si dereferenzia
un terminatore nullo, sarà uguale a
zero e zero è uguale a falso.
Sappiamo che i booleani ne hanno uno è vero zero è falso.
Quindi se è falso, salterà fuori. Quindi tutto ciò che
devi fare è nella tua condizione while mettere l'ultimo indirizzo a stella.
Di nuovo, questo dereferenzierà il puntatore.
E una volta che punta all'ultimo indirizzo, punta al terminatore nullo.
Ora dobbiamo assicurarci di modificare l'ultimo indirizzo, in modo che alla fine punti al terminatore nullo.
Qui tutto quello che possiamo fare è dire più più ultimo indirizzo.
Quindi ogni iterazione di questo ciclo while incrementerà l'indirizzo finché non
vede uno zero.
Uno zero rappresenta il terminatore nullo.
Quindi il risultato finale dell'esecuzione di
questo ciclo while, l'ultimo indirizzo punterà all'indirizzo del terminatore nullo.
Possiamo quindi sottrarre l'indirizzo del terminatore nullo dall'indirizzo che è
stato passato, la nostra stringa, e questo ci darà la nostra lunghezza.
Quindi è tutto ciò che dobbiamo fare nella riga successiva. Possiamo semplicemente dire restituisci il nostro
ultimo indirizzo e
in realtà vogliamo meno l'indirizzo,
quindi non è necessario de-referenziare nulla o utilizzare l'operatore di
riferimento indiretto, ultimo indirizzo meno stringa. Quindi la stringa viene passata,
non la modifichiamo affatto.
Indica il primo personaggio. Questo indicherebbe j.
Quello sarebbe l'indirizzo o per la prima volta che chiamiamo nella riga otto, quello sarebbe l'indirizzo di s.
L'ultimo indirizzo punterà all'indirizzo di quest'ultimo t.
In realtà uno in più, il terminatore nullo. Se diciamo l'ultimo indirizzo
meno l'indirizzo di s, ci darà la lunghezza.
Ed è quello che torneremo.
Quindi spero che abbia senso.
Di nuovo, sulla riga 17, stiamo creando una
variabile locale perché dobbiamo tenere traccia dell'ultimo indirizzo, l'indirizzo
del terminatore nullo.
Dopo che questo ciclo while è stato eseguito, l'ultimo indirizzo punterà a dopo
la t, il terminatore nullo.
Quindi possiamo semplicemente sottrarre l'ultimo indirizzo dalla stringa, l'indirizzo della stringa
punta a s quando arriva non lo modifichiamo.
Quindi vediamo cosa succede se questo ci restituisce la lunghezza corretta.
Quando lo eseguiamo, dovremmo vedere la lunghezza delle stringhe che abbiamo passato.
Quindi vediamo 17 0 e 5.
Vediamo 1 2 3 4 5 6 7 8 9
10 11 12 13, devi contare lo spazio, 14
15 16 17. Esatto, mettiamo tra
virgolette doppie che è vuoto, quindi dovrebbe essere zero e poi
Jason dovrebbe essere 5 quindi 17 0 e 5, è corretto.
Quindi quello che abbiamo fatto qui è
stato che abbiamo usato l'aritmetica del puntatore per ottenere l'ultimo indirizzo
più l'operatore di incremento, quindi puntare
la nostra aritmetica per ottenere la lunghezza minusing l'ultimo indirizzo meno la stringa.
Piuttosto pulito. Sto cercando di dimostrare la
potenza dell'aritmetica dei punti, la sua convenienza notazionale.
Come puoi facilmente aumentare, diminuire per arrivare
a vari punti in un array di
caratteri e ottenere i caratteri. In questo caso, stiamo solo ottenendo gli indirizzi e
quindi utilizzando gli indirizzi meno a vicenda per ottenere la lunghezza.
Quindi spero che questo sia stato utile. Assicurati di capire tutto ciò che ho appena menzionato.
Di nuovo, il concetto di una costante, il concetto di più più, il concetto
di condizione se si dereferenzia un indirizzo e
questo punta a un terminatore nullo è uno zero quindi salta fuori, e quindi
questo concetto di minusing due indirizzi. Grazie.