c++ 关于&X和&Y

程序是这样的
#include "stdafx.h"
#include "iostream.h"

struct Place
{
private:
int x;
int y;
public:
void SetPos(int X,int Y);
void GetPos(int &X,int &Y);
};

void Place::SetPos(int X,int Y)
{
x = X;
y = Y;
}

void Place::GetPos(int &X,int &Y)
{
X = x;
Y = y;
}

int main(int argc, char* argv[])
{
Place p;//定义结构变量
p.SetPos(100,120);//赋值
int x;
int y;
p.GetPos(x,y);//获取值
//输出值
cout << "X:" << x << "\n"
<< "Y:" << y << "\n";
return 0;
}
为了取出private变量xy的值所以使用了getpos这个函数,对于这个函数我还是不太清楚。为什么要使用&X和&Y呢?以及最后使用了getpos()之后为什么就能直接cout<<x<<y呢?

HUH函数
浏览 1314回答 2
2回答

梵蒂冈之花

&x为变量x的地址,&y为变量y的地址,测试程序如下:

梦里花落0921

这里的&X和&Y,是函数中引用形参,首先应该了解引用这一概念。首先用SetPos(100,200),将100和200分别赋值给类Place里面的成员变量x和y,要注意main函数中又定义了一个x和y,这两个地方的x和y是不一样的!在GetPos中的X和Y是局部变量,需要用到指针或者引用,才可以将其值传出来。由于GetPos中的X和Y是局部变量,如果直接写成GetPos(int X, int Y),那么在调用玩GetPos这个函数后,X和Y占用的内存就会释放。引用的作用在这里就体现出来了,你可以将指针里面学的知识类比来学习,指针里面有个很经典的例子就是数据交换:void swap(int v1, int v2){int temp = v2;v2 = v1;v1 = temp;}void swap(int *v1,int *v2){int *temp;*temp = *v2;*v2 = *v1;*v1 = temp;}上面的两个交换函数只有后者才交换成功了,后者的交换函数还可以用下面的写法:void swap(int &v1, int &v2){int temp = v2;v2 = v1;v1 = temp;}仔细体会局部变量,全局变量,指针,引用的妙用追问这个getpos()参数中使用引用的意义是不是用来将main函数中的x,y和这个局部变量XY绑定在一起,也就是说,在调用完getpos之后X,Y不会释放?追答可以这样理解。 GetPos中的X和Y不是接受的x,y的值,而是接受的x,y的地址,对X和Y的操作就相当于对x,y&nbsp;的操作。
打开App,查看更多内容
随时随地看视频慕课网APP