7

如果我有一个指针指向向量中的一个元素,比如元素 2,然后该元素将与同一向量的元素 4 交换。指针现在是指向元素 2、元素 4,还是两者都不指向?例子:

向量 a 等于 [1,2,3,4,5]
创建指向元素 2 的指针,在这种情况下等于 3
交换元素 2 和 4
向量 a 现在是 [1,2,5,4 ,3]

向量指向哪里?

4

1 回答 1

8

你的意思是,“指针指向哪里?”。如果是这种情况,它将指向内存中与以前相同的位置,该位置现在被 value 占用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 答案),同样会成立。

于 2010-07-07T15:49:01.357 回答