const 的定值判斷

2021-06-28 01:30:51 字數 1110 閱讀 3579

指標指向及其指向變數的值的變化

const在*的左邊,則指標指向的變數的值不可直接通過指標改變(可以通過其他途徑改變);在*的右邊,則指標的指向不可變。簡記為「左定值,右定向」。

1)指標指向的變數的值不能變,指向可變

int x = 1;

int y = 2;

const int* px = &x;

int const* px = &x; //這兩句表示式一樣效果

px = &y; //正確,允許改變指向

*px = 3; //錯誤,不允許改變指標指向的變數的值

2)指標指向的變數的值可以改變,指向不可變

int x = 1;

int y = 2;

int* const px = &x;

px = &y; //錯誤,不允許改變指標指向

*px = 3; //正確,允許改變指標指向的變數的值

3)指標指向的變數的值不可變,指向不可變

int x = 1;

int y = 2;

const int* const px = &x;

int const* const px = &x;

px = &y; //錯誤,不允許改變指標指向

*px = 3; //錯誤,不允許改變指標指向的變數的值

在c中,對於const定義的指標,不賦初值編譯不報錯,

int* const px;這種定義是不允許的。(指標常量定義的時候對其進行初始化)

int const *px;這種定義是允許的。(常指標可以再定義的時候不初始化)

但是,在c++中

int* const px;和const int* const px;會報錯,const int*px;不報錯。

必須初始化指標的指向int* const px = &x;const int* constpx=&x;

強烈建議在初始化時說明指標的指向,防止出現野指標!

改變const值的方式

一種改變const值的方式是使用const cast型別轉換符,將const變數轉換為乙個該變數的引用,通過這個引用去改變值,這種方法的實質就是用位址改變記憶體的值。如下例項 structsa const sa sa cout sa.i endl sa sb const cast sa sb.i 1...

演算法 和為定值

輸入乙個陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。咱們試著一步一步解決這個問題 注意闡述中數列有序無序的區別...

左右值以及const的規則

一 左值 寫資料,放在賦值符號的左邊。右值 讀資料,放在賦值符號的右邊。int a 10 int b a a為讀資料是右值 a 20 a為寫資料是左值 二 const 把變數變為唯讀 只限定左值 const c 10 a c c 20 錯誤 const int c 錯誤,沒有定義為隨機值而且不能改,...