亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c++ 關于&X和&Y

c++ 關于&X和&Y

C++
HUH函數 2018-07-29 21:21:53
程序是這樣的#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呢?
查看完整描述

2 回答

?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

&x為變量x的地址,&y為變量y的地址,測試程序如下:


查看完整回答
反對 回復 2018-08-02
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

這里的&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 的操作。


查看完整回答
反對 回復 2018-08-02
  • 2 回答
  • 0 關注
  • 1405 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號