C++ 传递指向指针的引用

  假设我们想编写一个与前面交换两个整数的 swap 类似的函数,实现两个指针的交换。已知需用 * 定义指针,用 & 定义引用。现在,问题在于如何将这两个操作符结合起来以获得指向指针的引用。这里给出一个例子:


// swap values of two pointers to int
void ptrswap(int *&v1, int *&v2)
{
  int *tmp = v2;
  v2 = v1;
  v1 = tmp;

}


形参int *&v1的定义应从右至左理解:v1 是一个引用,与指向 int 型对象的指针相关联。也就是说,v1 只是传递进 ptrswap 函数的任意指针的别名。main 函数,调用 ptrswap 交换分别指向值 10 和 20 的指针:


int main()
{
  int i = 10;
  int j = 20;
  int *pi = &i; // pi points to i
  int *pj = &j; // pj points to j
  cout << "Before ptrswap():\t*pi: "<< *pi << "\t*pj: " << *pj << endl;
  ptrswap(pi, pj); // now pi points to j; pj points to i
  cout << "After ptrswap():\t*pi: "<< *pi << "\t*pj: " << *pj << endl;
  return 0;

}


编译并执行后,该程序产生如下结果:


Before ptrswap(): *pi: 10 *pj: 20

After ptrswap(): *pi: 20 *pj: 10


即指针的值被交换了。在调用 ptrswap 时,pi 指向 i,而 pj 则指向 j。在 ptrswap 函数中,指针被交换,使得调用 ptrswap 结束后,pi 指向了原来 pj所指向的对象。换句话说,现在 pi 指向 j,而 pj 则指向了 i。

你可能感兴趣的:(C++ 传递指向指针的引用)