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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

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

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

正在回答

4 回答

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

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

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

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

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

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

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

我們先看另外一個(gè)例子:

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

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

回到原問題,

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

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

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

六個(gè)蒸蛋

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

一般來說都是變y吧

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

舉報(bào)

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

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

進(jìn)入課程

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

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

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

幫助反饋 APP下載

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

公眾號(hào)

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