const與非const型別賦值問題

2021-08-11 06:21:45 字數 1050 閱讀 2033

非指標型別

const

int c_a =10;

int b =20;

b = c_a ;

// 正確

c_a = b;

// error!

關於這個問題,網上有說」非const變數賦給const變數,是非法的「。請不要陷入這種容易混亂的邏輯。

上述情況,比較正確的解釋。const int 在初始化之後,是不能再改變的。且const int 必須在宣告時就賦值。

// error

const

int c_a;

c_a =

10;

指標型別
const

int* c_ptra =

newint(10

);int* ptrb=

newint(10

);c_ptra = ptrb;

// 沒問題

ptrb = c_ptra;

// 編譯報錯 不能從 const int* 轉換程 int*

// 下面這種情況不會報錯,但可能造成程式崩潰

ptrb =

(int

*)c_ptra;

// ....

*ptrb =20;

// 此處修改了b和a共同指向的位址的內容,程式崩潰

const int * 表示,指向常量int 型別的指標,即指向的這塊記憶體的內容,不可以修改。(但指標本身可以修改)。

int * 表示,指向非常量int型別的指標,指標這塊記憶體的內容可修改,指標本身可修改。

const int* 已經限制此位址內容,不可修改。這時,卻讓 int * 指標指向這塊位址,而使用 int * 指標,表示此位址內容可修改。那麼到底可不可以改?

接上,因此邏輯衝突,編譯器報錯。

// 正確

const

int* c_a;

// ...

c_a = someaddress;

const與非const型別賦值問題

const與非const型別賦值問題 以前總有個問題想不通,就是為什麼從const char到char的賦值就會出錯,而const int到int的賦值就沒問題呢?呵呵,不知道有沒有其他新手和我有相同的疑問呢?還算我運氣好,今天不知道怎麼會觸發了靈感,終於把這個小白問題想通了。答案就是 從const...

const與非const型物件

一 非const物件可以初始化const物件 int i 0 const int ci i 因為它們使用各自的儲存單元。二 非const引用與const引用 1 const引用可以用常量 表示式 const物件或非const物件初始化 int i 0 const int refi i 儘管i與ref...

const引用與非const引用

const引用可讀不可改,與繫結物件是否為const無關,注意區分const引用與對const物件的引用 非const引用可讀可改,只可與非const物件繫結 const int ival 1024 const int refval ival ok both reference and object...