指针向量的元素

时间:2010-07-07 15:47:33

标签: c++ pointers dereference

如果我有一个指向向量中的元素的指针,比如元素2,那么该元素将与相同向量的元素4交换。指针现在指向元素2,元素4,还是两者都没有?例如:

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

指向哪个向量?

1 个答案:

答案 0 :(得分:8)

你的意思是,“指针指向哪里?”。如果是这种情况,它将指向内存中与之前相同的位置,现在由值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,则假设没有重新分配,则保持不变(请查看this SO answer)。