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 的共同性...