[英]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
指向a
, q
指向b
:
p a
+---+ +---+
+ ------> | 5 |
+---+ +---+
q b
+---+ +---+
+ ------> | 9 |
+---+ +---+
交换p
和q
, q
指向a
, p
指向b
:
q a
+---+ +---+
+ ------> | 5 |
+---+ +---+
p b
+---+ +---+
+ ------> | 9 |
+---+ +---+
但是a
和b
仍然有其旧值。
通常,您交换的是两个指针,而不是它们所指向的指针。
在调用值a和b时,您的函数可能会使您感到困惑。 您的函数交换了两个指针,这样第一个指针现在指向第二个指针指向的位置,第二个指向第一个指针指向的位置。
p
先前指向a
, q
指向b
。 现在p
指向b
, q
指向a
因此您的输出为9 5 5 9
您的swap
函数中有引用。 这些是对指针的引用,因此函数范围内的a
和b
成为传入参数(即p
和q
别名,从而修改了p
和q
(以指向其他地方)。
在您的情况下,您正在交换指针(而不是值)。 由于要交换指针,因此a
和b
内的实际值保持不变。 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.