C 學習筆記 C和C 中的const關鍵字

2021-07-27 07:11:18 字數 2274 閱讀 7039

一.c語言中的const

const是c語言中保留的乙個關鍵字,它用來限定乙個變數是唯讀的,即不可變的。程式中使用const可以在一定程度上提高程式的健壯性,但是程式中使用過多的const,可能在對**的閱讀時增加一定的難度。

(1)用const修飾一般變數

注意在c語言中,用const修飾的變數必須在宣告時進行初始化(用來修飾函式的形參除外);

如:const int n;  這種宣告方式是錯誤的

const int n=5; 正確

void fun(const int n); 正確

const char a; 錯誤

char * const p;  錯誤

const char *p;正確(注意這種為什麼是正確的),因為這裡const是修飾p指向的變數,而不是指標變數p本身 

一旦乙個變數被const修飾後,在程式中除初始化外對這個變數進行的賦值都是錯誤的。

如:const int n=5;

n=3;    錯誤

(2)const與指標搭配使用

首先必須弄清楚兩個基礎概念:指標常量和常量指標

指標常量:即指標本身的值是不可改變的,而指標指向的變數的值是可以改變的;

常量指標:即指標指向的變數的值是不可改變的,而指標本身的值是可以改變的;

可以這樣去理解:因為指標本身也是乙個變數,只不過指標存放的是位址而已,而一旦指標變成了常量,即指標本身的值是不可變的,此時指標只能指向固定的儲存單元;指標一般會指向乙個變數,如果該變數成為乙個常量,那麼該變數的值就不能被修改,即常量指標,指標指向的是乙個不可變的變數。

如:int a=3;

const int*p=&a;

int const*p1=&a;

*p=4;

a=4;

第2行和第3行是等價的;

第四行是錯誤的,因為用const限定p指向的變數的值是不可修改的,即不可通過指標p去修改變數a的值;

第五行是正確的,因為a本身沒用const進行修飾,即a本身的值是可以修改的.

int a=1;

int b=2;

const int*p;

int const*p1;

int* const p2;

int* const p3=&b

p=&a;

p1=&a;

p2=&b;

p3=&a;

第3、4、7、8行是正確的;

第5行是錯誤的,第6行是正確的,第10行是錯誤的,因為const在'*'後面,表示是來修飾指標變數本身,因此在宣告時必須進行初始化,並且在後面不能再指向其它的變數.

#includeint main(void)

編譯結果:

test.c(6) : warning c4090: 'initializing' : different 'const' qualifiers

輸出結果是: 4

4從這裡可以看出a的值被修改了,在c語言中用const去修飾整形變數a,即a的值是不可變的,不能顯式地通過賦值語句去改變a的值,

但是不代表在程式中不能通過其它方法來修改這個值。

總結:(1)在c語言中用const去修飾乙個變數,表示這個變數是唯讀的,不可通過顯式的呼叫a去修改a的值,並且此時a仍然是乙個變 量,不能等同於常量;

(2)要注意const在宣告變數時所處的位置,位置不同,在意義上可能會有很大的不同。

如果const在'*'左邊,則表示指標指向的變數的值不可變;

如果const在'*'右邊,則表示指標的值是不可變的;

二.c++中的const

c語言和c++中的const有很大區別。在c語言中用const修飾的變數仍然是乙個變數;而在c++中用const修飾過後,就變成常量了。

如:const int n=5;

int a[n];

這種方式在c語言中會報錯,原因在於宣告陣列時陣列的長度必須為乙個constant,即常量,雖然n用const限定了,但n終究是乙個變數,因此會報錯;

但是在c++中不會報錯,因為在c++中用const修飾過後,n就已經等同於乙個常量了,因此可以通過。

又如:#include

using namespace std;int main(void)

編譯結果:

lianxi.cpp(7) : error c2440: 'initializing' : cannot convert from 'const int *' to 'int *'

這種情況在c++中是不允許的,原因在於a用const修飾後,已經成為常量了,因此是不允許被修改的,無論是顯式的更改a的值或是通過其它方法修改它的值都是不允許的。

C 學習筆記(const)

c 中,經常可以看到用const修飾變數,修飾函式。現在,我們對const進行總結 不必死記硬背 1 const修飾變數 int a 3 定義整型變數a const int a 3 表明a為常變數,a的值不能夠被改變 2 const修飾引用 const int b a b與a的位址相同,不能通過b來...

C 學習筆記 const

const在c 中有著大量的運用,深刻理解const有助於進一步理解c int main 初級理解 const是定義常量 const意味著唯讀 含義 const好處 int main 通過以上程式可以改變a的值,不符合預期 c 編譯器對const常量的處理 當碰見常量宣告時,在符號表中放入常量 問題...

C和C 中const的區別

原文出自 一.c語言中的const const是c語言中保留的乙個關鍵字,它用來限定乙個變數是唯讀的,即不可變的。程式中使用const可以在一定程度上提高程式的健壯性,但是程式中使用過多的const,可能在對 的閱讀時增加一定的難度。1 用const修飾一般變數 注意在c語言中,用const修飾的變...