繁体   English   中英

对指向int的指针的引用输出错误

[英]Wrong output of reference to pointer to int

我试图在下面的程序中使用指向int指针的引用。 但是我没有得到预期的输出。

输出:

9 5
5 9

期望:

9 5
9 5

码:

#include <iostream>
using namespace std;

void swap (int *& a, int *&b)
{
    int *t = a;
    a = b;
    b = t;
}

int main()
{
    int a = 5, b = 9;       
    int *p = &a;
    int *q = &b;

    swap (p, q);
    cout << *p << " " << *q << endl;
    cout << a << " " << b << endl;

    return 0;
}

为什么我的期望是错误的? 我认为引用并不是目标变量的另一个名称。

您交换指针,而不是值。 您的期望是错误的。

您正在交换指针的值。

看这个图:

首先, p指向aq指向b

  p         a
+---+     +---+
+ ------> | 5 |
+---+     +---+

  q         b
+---+     +---+
+ ------> | 9 |
+---+     +---+

交换pqq指向ap指向b

  q         a
+---+     +---+
+ ------> | 5 |
+---+     +---+

  p         b
+---+     +---+
+ ------> | 9 |
+---+     +---+

但是ab仍然有其旧值。

通常,您交换的是两个指针,而不是它们所指向的指针。

在调用值a和b时,您的函数可能会使您感到困惑。 您的函数交换了两个指针,这样第一个指针现在指向第二个指针指向的位置,第二个指向第一个指针指向的位置。

p先前指向aq指向b 现在p指向bq指向a因此您的输出为9 5 5 9

您的swap函数中有引用。 这些是对指针的引用,因此函数范围内的ab成为传入参数(即pq别名,从而修改了pq (以指向其他地方)。

在您的情况下,您正在交换指针(而不是值)。 由于要交换指针,因此ab内的实际保持不变。 Hencewhy当您打印的价值a ,你会得到5 ,当你打印b你得到9

我认为引用不是目标变量的别称

是的,您的目标变量变量的指针,而不是变量。 因为您在函数声明中使用* 然后,您交换的是指针而不是值。

使用以下方式之一:

void swap(int &a, int &b)
{
    int t=a;
    a=b;
    b=t;
}
// ...

int a=5,b=9;        
swap(a,b);

要么

void swap(int *a, int *b)
{
    int t=*a;
    *a=*b;
    *b=t;
}
// ...

int a=5,b=9;        
swap(&a,&b);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM