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?

È stato utile?

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 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 ).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top