Вы имеете в виду «где указатель указывает на?». Если это так, он будет указывать на то же место в памяти, что и раньше, которое теперь занято значением 5
.
Кроме того, при обмене я предполагаю, что вы имели в виду обмен значениями между двумя местоположениями.
Почему?
Просто потому, что ваш указатель указывает на область памяти. То, что там хранится, не имеет значения - это может быть значение или мусор. Когда вы разыменовываете его (чтобы увидеть, что это за значение), оно вернет значение, хранящееся в этом месте.
Поскольку вы меняли значения, значение в этом месте равно 5
, а не 3
, следовательно, указатель все еще указывает на то же место и не изменяет , но значение на месте изменилось .
Пример кода:
// 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;
Примечание:
Я использовал массив целых чисел в примере, но если под вектором вы имели в виду std::vector
, то же самое будет сохраняться, если не произошло перераспределения (посмотрите этот ответ SO ).