關於const的用法

2021-08-21 12:10:43 字數 1760 閱讀 2416

在生活或工作中,對於一些檔案、程式或資料,需要設定對它們的讀寫許可權。在必要的時候,如果限定一些資料只具有「讀」的許可權,而不能對它們進行賦值或修改,這時,我們需要使用 『const』 對資料進行修飾。

在對const進行解釋之前,先引入兩個名詞:左值、右值;

左值:放在「=」(賦值)符號左邊的就是左值。其他情況都是右值。例如:a = 10,a為左值;a<10,a為右值。

左值:寫許可權;可以對左值進行賦值、修改等操作。

右值:讀許可權;只能讀取右值,不能對它進行賦值修改操作。

const:限定變數的許可權,變成唯讀(不能做左值)。

例如:int a;

a = 10;  //左值,放在"="符號左邊就是左值,其它情況都是右值

int b = a;

const int ca = 10;  //限定寫許可權,變成唯讀

b = ca;  //ok;將ca的值賦值給b,對ca只進行「讀」操作;

ca = 20;  //error;將20賦值給ca,對ca進行了「寫」操作,語句錯誤;

const int cb;  //error;由於後續不能再對cb進行賦值,需要在定義cb的時候進行賦值,否則cb無意義

1、基本資料型別對於const透明;

例如:  const int ca = 10;

int const cb = 20;  //這兩個語句的作用是一樣的;const可以忽略資料型別,只修飾ca和cb

2、const修飾它的直接右邊;

例如: int a = 10;

int b = 20;

int *p = &a;

p = &b;

int *q = &a;

q = p;

*p = 200;

b = *p;

const int *p1 = &a;

p1 = &b;  //ok,資料型別int對於const是透明的,而『*』不是,所以const忽略int直接修飾 *p1;

*p1 = 1000;  //error,因此可以修改p1,不能修改*p1;

int const *p2 = &a;  //p2完全等同p1;

int *const p3 = &a;  //const直接修飾p3;因此可以修改*p3,不能修改p3;

p3 = &b;  //error

*p3 = 100;  //ok

3、許可權可以等同或者縮小傳遞,不能放大傳遞

例如: int a = 10;

int b = 20;

const int ca = 10;

int *p1 = &a;

*p1 = 20;  //通過將p1解引用間接對a賦值,此時a=20;

p1 = &b;

int *p2 = &ca;  //error,將指標p2設為ca的位址,從而可以通過將p2解引用間接對ca進行賦值,許可權放大傳遞,語句錯誤

const int *p3 = &a;

const int *p4 = &ca;  //指標p4儲存ca的位址,const修飾*p4,因此*p4只有「讀」操作,對p賦值修改的是ca位址,不影響

int *const p5 = &a;

int *const p6 = &ca; //error,const修飾的是p6,因此對*p6賦值是允許的,而*p6解引用可以間接對ca賦值因此語句正確,操作錯誤

關於const的用法

1.const int p hello 這個意思就是這個指標變數p指向的內容不能改變,但是可以改變讓p指向其他的位址。const char p hello p ok printf s p 所以這個的執行結果就是ok,如果稍加修改 const char p hello p 0 o printf s p...

關於const用法的總結

include if 0 測試const 變數 int main endif if 0 測試指標常量 const int a 二級指標修改 一級指標的值 void test const int a void test02 int a 二級指標,把實參的位址,扔過來.void test02 const...

關於c 中const的用法

1.當然最常用的還是作為常量。1 const int p的用法,表示指向的值得型別不變還是int型,但p的值可以變,可以這樣理解 自以為指向const的指標 可以將非const的物件賦值給他例如可以這樣 int i 3 int j 4 const int p p i cout p p j cout ...