const的使用和作用

2021-08-11 23:20:32 字數 3162 閱讀 1420

const的使用和作用:

const它限定乙個變數不允許被改變,產生靜態作用。使用const在一定程度上可以提高程式的安全性和可靠性。

const主要作用:

(1)可以定義const常量,具有不可變性。 

例如:const int max=100; max++會產生錯誤; 

(2)便於進行型別檢查,使編譯器對處理內容有更多了解,消除了一些隱患。

例如: void f(const int i) 編譯器就會知道i是乙個常量,不允許修改; 

(3)可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。 同巨集定義一樣,可以做到不變則已,一變都變!

如(1)中,如果想修改max的內容,只需要:const int max=you want;即可!

(有錯,這樣不能修改,會報重複定義的錯誤)

(4)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 還是上面的例子,如果在函式體內修改了i,編譯器就會報錯; 

例如: void f(const int i)  

(5) 可以節省空間,避免不必要的記憶體分配。 例如: 

#define pi 3.14159 //常量巨集 

const double pi=3.14159; //此時並未將pi放入ram中 ...... 

double i=pi; //此時為pi分配記憶體,以後不再分配! 

double i=pi; //編譯期間進行巨集替換,分配記憶體 

double j=pi; //沒有記憶體分配 

double j=pi; //再進行巨集替換,又一次分配記憶體! 

const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,而不是像#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有乙份拷貝,而#define定義的常量在記憶體中有若干份拷貝。 

(6) 提高了效率。 

編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

const使用:例一

下面分別用const限定不可變的內容是什麼?

1)const在前面

const int nvalue; //int是const

const char *pcontent; //char是const, pcontent可變

const char* const pcontent; //pcontent和*pcontent都是const

2)const在後面,與上面的宣告對等

int const nvalue; //nvalue是const

char const * pcontent; //*pcontent是const, pcontent可變

char* const pcontent; //pcontent是const,*pcontent可變

char const* const pcontent; //pcontent和*pcontent都是const

答案與分析:

const和指標一起使用是c語言中乙個很常見的困惑之處,在實際開發中,特別是在看別人**的時候,常常會因為這樣而不好判斷作者的意圖,下面講一下我的判斷原則:

const只修飾其後的變數,至於const放在型別前還是型別後並沒有區別。如:const int a和int const a都是修飾a為const。注意*不是一種型別,如果*ptype之前是某型別,那麼ptype是指向該型別的指標

乙個簡單的判斷方法:指標運算子*,是從右到左,那麼如:char const * pcontent,可以理解為char const (* pcontent),即* pcontent為const,而pcontent則是可變的。 例二

int const * p1,p2;

p2是const;(*p1)是一整體,因此(*p1)是const,但p1是可變的。int * p1,p2只代表p1是指向整型的指標,要表示p1、p2都是指標是需寫成int * p1,* p2。所以無論是* const p1,p2還是const * p1,p2,裡面的*都是屬於p1的。 例三

int const * const p1,p2;

p2是const,是前乙個const修飾的,*p1也被前乙個const修飾,而p1被後乙個const修飾。 例四

int * const p1,p2;

p1是const,(* const p1)是整體,所以const不修飾p2。 例五

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

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* const px=&x;

Const 的作用和用法

const型別定義 指明變數或物件的值是不能被更新,引入目的是為了取代預編譯指令 常量必須被初始化 cons的作用 1 可以定義const常量 例如 const int max 100 int array max 2 便於進行型別檢查 例如 void f const int i 編譯器就會知道i是乙...

const的主要作用

可以定義const常量,具有不可變性。例如 const int max 100 max 會產生錯誤。可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。同巨集定義一樣,可以做到不變則已,一變都變!如 1 中,如果想修改max的內容,只需要 const int max you want ...

const的作用總結

const 是c 中常用的型別修飾符,常型別是指使用型別修飾符const說明的型別,常型別的變數或物件的值是不能被更新的。1.定義常量 const int a 0 const 定義後,a的值不可再改變,類似於巨集定義 intconst a 0 兩種形式意義一樣。const 與 define 的共同性...