第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于 const int *p=&x;的問題

const int *p=&x;

關于這個老師給的講解是,p可以指向其他位置,但是*p的值是不能變的。

那么對于如下代碼

int main(void)
{
?????int x = 10 , y = 20;
?????const int *p = &x;
?????cout << *p << endl;
?????p = &y;
???? cout << *p << endl;
?????system("pause");
?????return 0;
}

輸出的兩次*p的值分別是10和20,那么這在間接程度上改變了*p的值,不與【*p值不變】這樣的設定相違背嗎》


正在回答

2 回答

準確地表達應該是:p是一個指向const int型變量的指針,所以p無法修改其指向的int對象。但p本身不是const的,所以能被改變(也就是可以指向別的int)。*p是解引用p以得到p指向的對象。

代碼中第一個*p得到x,但只是用來讀取x的值,并沒有修改x的內(nèi)容。然后代碼將y的地址賦予了p,再次*p時就得到了y,同樣代碼中也沒有更改y的內(nèi)容,所以說沒有改變*p的值。 ?那個講解只說“*p”容易會引起理解上的歧義。


還應該注意到一點:p是一個指向const int的指針,說明p可以指向const int對象,也可以指向普通的int對象。只不過通過p來訪問指向的int對象時,編譯器會將這個對象當作const對象(因為p類型本身就是指向const對象的),你無法修改它的內(nèi)容。?示例中的就是這種情況,x和y都是普通的int,但*p無法更改它們的內(nèi)容。

1 回復 有任何疑惑可以回復我~
#1

ShadowKid 提問者

非常感謝!
2015-06-25 回復 有任何疑惑可以回復我~
#2

ShadowKid 提問者

指針可以改變指向的地址,但是對應地址里的值通過*p操作無法改變,是這個意思吧?
2015-06-25 回復 有任何疑惑可以回復我~
#3

onemoo 回復 ShadowKid 提問者

是的。 因為這個指針是指向const對象的,從指針角度來說,所指的內(nèi)容就是const的,即便其所指的對象原本并非const。 所以你無法通過*p來修改它。
2015-06-25 回復 有任何疑惑可以回復我~

首先這里const修飾的是只讀變量而非常量,也就是說本質(zhì)上還是一個變量。

這里*p是只讀變量,無法直接賦值改變,但p所指向的內(nèi)存地址是可變的,所以可以通過改變p指向的地址來改變*p的值,但不能直接給*p賦值來改變。貌似不矛盾吧。

0 回復 有任何疑惑可以回復我~
#1

ShadowKid 提問者

謝謝同學的回答!
2015-06-25 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之離港篇
  • 參與學習       122681    人
  • 解答問題       488    個

C++掃清通往面向?qū)ο蟮淖詈笠坏勒系K,將所有知識點融會貫通

進入課程

關于 const int *p=&x;的問題

我要回答 關注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號