Puntatore ad un elemento di un vettore
-
02-10-2019 - |
Domanda
Se ho un puntatore che punta ad un elemento in un vettore, detto elemento 2, e quindi tale elemento viene scambiato con elemento 4 dello stesso vettore. È il puntatore ora punta all'elemento 2, elemento 4, o nessuno dei due? Esempio:
vettore a è uguale a [1,2,3,4,5]
creare puntatore che punta all'elemento 2, che è uguale a 3 in questo caso
Elementi di swap 2 e 4 foto
vettore a è ora [1,2,5,4,3]
dove è il vettore punta a?
Soluzione
Vuoi dire, "dove si trova il puntatore che punta a?". Se questo è il caso, sarà puntare nella stessa posizione in memoria come prima che ora è occupato dal 5
valore.
Inoltre, scambiando presumo si intende scambiare i valori tra le due posizioni.
Perché?
semplicemente perché il vostro puntatore punta a una posizione di memoria. Quali dati sono memorizzati non ci ha importanza --- potrebbe essere un valore, o potrebbe essere spazzatura. Quando si dereferenziarlo (per vedere che cosa il valore è) restituirà il valore memorizzato in quella posizione.
Dal momento che hai scambiato i valori, il valore in quella posizione è 5
non 3
di conseguenza, la puntatore punta ancora nella stessa posizione ed è invariata ??strong> e il valore alla posizione ha cambiato .
Esempio di codice:
// Create the vector
int a[] = {1,2,3,4,5};
int* ptr = &a[2];
// Display original status
std::cout<<"Original Value: "<<*ptr<<std::endl;
std::cout<<"Address: "<<ptr<<std::endl;
// Swap values
std::swap(a[2],a[4]);
// Check
std::cout<<"New Value: "<<*ptr<<std::endl;
std::cout<<"Address: "<<ptr<<std::endl;
Nota:
Ho usato un array di interi nell'esempio, ma se un vettore si intende std::vector
, la stessa deterrà assumendo nessun riallocazione ha avuto luogo (il check out questo SO risposta ).