Quali sono i puntatori in C ++?
Indica lo strumento più potente in c ++, aiuta il programmatore ad accedere e manipolare direttamente la memoria. Ad esempio, quando viene creata una variabile, il lavoro del compilatore consiste nell'eseguire l'allocazione di memoria per memorizzare il valore della variabile. E questo valore viene recuperato utilizzando il nome della variabile assegnato ai dati. C ++ ha la compatibilità per archiviare e recuperare i dati dalla memoria facendo riferimento all'indirizzo della posizione di memoria in cui sono memorizzati i dati. C ++ esegue anche puntatori su un puntatore.
Sintassi
Il formato generale della dichiarazione del puntatore è:
Data_type * pointer -variable-name
Si noti che la variabile puntatore deve essere preceduta da un asterisco (*)
Esempio: int * xptr;
La variabile xptr è un puntatore a un numero intero. In generale, le variabili del puntatore possono puntare a variabili intere, variabili di carattere, matrici, file, funzioni.
Perché abbiamo bisogno di puntatori in C ++?
L'allocazione dinamica della memoria è semplificata in C ++ utilizzando i puntatori, la più importante importanza dei puntatori è che sono molto efficienti nella gestione dei diversi tipi di dati. Aumentano la velocità di esecuzione quando la funzione restituisce un valore e danno anche accesso ad una variabile definita all'esterno della funzione. L'uso più comune include la gestione dei dati e l'accesso alle funzioni dei membri della classe.
Come creare puntatori in C ++?
Ecco i seguenti passaggi per creare puntatori in C ++
Passaggio n. 1: inizializzazione di puntatori
Si consiglia di inizializzare le variabili del puntatore, non appena vengono dichiarate. Poiché le variabili puntatore memorizzano gli indirizzi, possono indirizzare qualsiasi parte della memoria.
int *a; // pointer to an integer
double *da; // pointer to a double
float *fa; // pointer to afloat
char *ch // character pointer
Considera il seguente esempio:
int p, * pi; // Questa istruzione indica al compilatore di riservare uno spazio per la variabile p in memoria per contenere un valore intero.
pi = & a; // Assegna l'indirizzo della variabile intera p alla variabile puntatore. Ad esempio, se l'indirizzo di p è 4581, il valore in * pi sarà uguale a 4581.
Passaggio n. 2 - Puntatore nullo
Qui la variabile puntatore può puntare qualsiasi tipo di dati e questo tipo viene utilizzato nel passaggio dei puntatori a funzioni che funzionano indipendentemente dal tipo di dati indicato.
Sintassi: void * variabile puntatore;
Esempio:
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
Produzione:
$ g ++ -o main * .cpp
$ principale
il valore indicato da iv è 3
L'indirizzo di x è 0x7ffefbbee6d4
il valore indicato da fv è 45.2
L'indirizzo di f è 0x7ffefbbee6d0
L'indirizzo di x è 0x7ffefbbee6d4
l'indirizzo di f è 0x7ffefbbee6d0
Step # 3 - Puntatori Operazioni aritmetiche in C ++
L'aritmetica del puntatore viene eseguita con array. Le seguenti operazioni possono essere eseguite sui puntatori. Loro sono:
- Incremento (++)
- Decremento (-)
- Aggiunta puntatore
- Sottrazione del puntatore
Quando aggiungiamo 1 al puntatore, specifica l'aggiunta della dimensione del puntatore che punta a.
Il programma seguente specifica l'aritmetica del puntatore che funziona fino a quando non arriva alla fine dell'array.
#include
#include
using namespace std;
void pointerarithmetic(int a(), int size)
(
int *e, *t; //Declaring two int pointers variables
e = a; //assigning e to point the arrays initial element a(0) t = a + size; // assigning variable t to the array last element
while(e != t)
(
cout << *e << endl; //displays the e
e++; // incrementing ( next element)
)
)
int main()
(
int a() = (2, 4, 6, 8, 10, 12, 14, 16, 18, 20);
pointerarithmetic (a, 20);
return 0;
)
Produzione:
$ g ++ -o main * .cpp
$ principale
2
4
6
8
10
12
14
16
18
20
0
0
4196480
0
-1.743, 362854 millions
32686
1
0
153860328
32766
Passaggio n. 4 - Puntatore a puntatore
float ** fpp;
Indica due livelli di puntatori ( più indicazioni indirette ). È una variabile che punta a un altro puntatore indica ulteriormente un oggetto specificato in una posizione di memoria. Ad esempio, fpp è un puntatore float che attualmente punta all'indirizzo di memoria 2001, la dimensione del float è di 8 byte, quindi per
FPP ++;
indica fpp che punta all'indirizzo 2009. Allo stesso modo, quando la variabile viene diminuita di 1, indicherà la posizione precedente del suo tipo di base all'indirizzo 1993.
Passaggio n. 5 - Puntatore alle funzioni
Quando i puntatori vengono passati a una funzione come argomenti, gli elementi di dati associati alla variabile di questi puntatori vengono modificati all'interno della funzione e quindi restituiti al programma chiamante, le modifiche verranno mantenute nel programma chiamante. Quando un puntatore viene passato come parametro, i rispettivi elementi di dati vengono modificati globalmente dall'interno della funzione chiamata. Il puntatore viene passato per riferimento. Le funzioni possono essere eseguite in puntatori in diversi modi:
- la funzione invocata passando il riferimento
- La funzione richiamata passando un puntatore
La funzione richiamata passando il riferimento
In questo, l'indirizzo viene passato come argomento anziché come valori.
Esempio:
#include
using namespace std;
void changefn(int*, int*);
int main()
(
int n = 5, m = 6;
cout << "Before change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
changefn(&n, &m);
cout << "\nAfter change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
return 0;
)
void changefn(int* x1, int* x2) (
int s1;
s1 = *x1;
*x1 = *x2;
*x2 = s1;
)
Produzione:
$ g ++ -o main * .cpp
$ principale
Prima del cambiamento
n = 5
m = 6
Dopo il cambiamento
n = 6
m = 5
Conclusione
Questo articolo intendeva aggiornare le conoscenze su come utilizzare i puntatori in C ++ e i loro argomenti di base in modo semplice con un esempio. Il puntatore è anche noto come localizzatore riduce l'istruzione del codice per prestazioni più elevate. I puntatori svolgono un ruolo vitale nell'implementazione di strutture di dati come l'elenco collegato e la programmazione a livello di sistema. Sono il linguaggio più preferibile nei sistemi embedded in quanto sono un buon modo per accedere direttamente alla memoria usando i puntatori.
Articoli consigliati
Questa è una guida ai puntatori in C ++. Qui discutiamo come creare puntatori in C ++ con gli esempi e l'output forniti e perché ne abbiamo bisogno. Puoi anche consultare il seguente corso di analisi dei dati per saperne di più
- Puntatori in Python
- Tipi di dati in C
- Matrici in C ++
- Motivi a stella in c ++
- Come funzionano i puntatori in C #?