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

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

int x; const int *y = &x;為什么合法

x將地址給了y,那么*y和x就是一體的,x改變*y也會改變,如果我下面的代碼改變了x,那*y也要變,可是*y不是收到了const的修飾不能變么,為什么合法0.0

正在回答

4 回答

x將地址給了y,那么*y和x就是一體的,x改變*y也會改變,如果我下面的代碼改變了x,那*y也要變,可是*y不是收到了const的修飾不能變么

按照C指針的說法,第一句就是錯的,y是指向x的指針,和x不是一體的,x是變量,x不管怎么變,y指向的地址是不變的。

const int * y 就是指向只讀變量的指針,不能改變值,但是可以指向別人

0 回復(fù) 有任何疑惑可以回復(fù)我~

*y是指向x的地址吧,加const表示指向的這個地址不變,所以不管x變化與否,*y還是指向x的地址,只是這個地址的值變了,因此*y的值變化,這是合法的。

0 回復(fù) 有任何疑惑可以回復(fù)我~

根本原因是:因?yàn)?int x 在前, const int* y = &x 在后,原則上要求對 *y 的任何操作不能導(dǎo)致 x 有違規(guī)行為。

我們先看另外一個例子:

const?int?x=3;?
int*?y=&x;

這里 *y 是個變量,是可讀可寫的,而對 *y 的寫入操作(即再次賦值)會改變 x 的值,但 x 已經(jīng)被聲明為常量,不能重新賦值,所以對 *y 重新賦值對于 x 來說是個違規(guī)操作。也就是說,對 *y 的某些操作有可能導(dǎo)致 x 有違規(guī)行為,所以無法通過編譯。

回到原問題,

int?x;?const?
int?*y?=?&x;

這里,因?yàn)?*y 被聲明為一個常量,我們沒法直接對 *y 二次賦值,所以對 *y 的“任何操作”其實(shí)就只剩下一種操作,就是讀操作,即讀取 *y 的值。而這個操作是不會導(dǎo)致 x 有違規(guī)行為的,因?yàn)?x 是個變量,我們既能讀取它的值,又能改變它的值。所以對 *y 的任何操作不會導(dǎo)致 x 有違規(guī)行為,因此是合法的,可以通過編譯。

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

六個蒸蛋

第二個框框的代碼寫錯了,應(yīng)該是 int x; const int *y = &x;
2019-11-07 回復(fù) 有任何疑惑可以回復(fù)我~

一般來說都是變y吧

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消
C++遠(yuǎn)征之離港篇
  • 參與學(xué)習(xí)       122681    人
  • 解答問題       488    個

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

進(jìn)入課程

int x; const int *y = &x;為什么合法

我要回答 關(guān)注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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