程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 詳解C說話中const症結字的用法

詳解C說話中const症結字的用法

編輯:關於C++

詳解C說話中const症結字的用法。本站提示廣大學習愛好者:(詳解C說話中const症結字的用法)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C說話中const症結字的用法正文


症結字const用來界說常量,假如一個變量被const潤飾,那末它的值就不克不及再被轉變,我想必定有人有如許的疑問,C說話中不是有#define嗎,干嗎還要用const呢,我想事物的存在必定有它本身的事理,所以說const的存在必定有它的公道性,與預編譯指令比擬,const潤飾符有以下的長處:

1、預編譯指令只是對值停止簡略的調換,不克不及停止類型檢討

2、可以掩護被潤飾的器械,避免不測修正,加強法式的硬朗性

3、編譯器平日不為通俗const常量分派存儲空間,而是將它們保留在符號表中,這使得它成為一個編譯時代的常量,沒有了存儲與讀內存的操作,使得它的效力也很高。

上面我們從幾個方面來講一下const的用法:

1、潤飾部分變量

const int n=5;
int const n=5;
這兩種寫法是一樣的,都是表現變量n的值不克不及被轉變了,須要留意的是,用const潤飾變量時,必定要給變臉初始化,不然以後就不克不及再停止賦值了。

接上去看看const用於潤飾常量靜態字符串,例如:

const char* str="fdsafdsa";
假如沒有const的潤飾,我們能夠會在前面成心有意的寫str[4]='x'如許的語句,如許會招致對只讀內存區域的賦值,然後法式會連忙異常終止。有了const,這個毛病就可以在法式被編譯的時刻就立刻檢討出來,這就是const的利益。讓邏輯毛病在編譯期被發明。

2、常量指針與指針常量

常量指針是指針指向的內容是常量,可以有一下兩種界說方法。

const int * n;
int const * n;
須要留意的是一下兩點:

1、常量指針說的是不克不及經由過程這個指針轉變變量的值,然則照樣可以經由過程其他的援用來轉變變量的值的。

int a=5;
const int* n=&a;
a=6;
2、常量指針指向的值不克不及轉變,然則這其實不是意味著指針自己不克不及轉變,常量指針可以指向其他的地址。

int a=5;
int b=6;
const int* n=&a;
n=&b;
指針常量是指指針自己是個常量,不克不及在指向其他的地址,寫法以下:

int *const n;
須要留意的是,指針常量指向的地址不克不及轉變,然則地址中保留的數值是可以轉變的,可以經由過程其他指向改地址的指針來修正。

int a=5;
int *p=&a;
int* const n=&a;
*p=8;
辨別常量指針和指針常量的症結就在於星號的地位,我們以星號為分界限,假如const在星號的右邊,則為常量指針,假如const在星號的左邊則為指針常量。假如我們將星號讀作‘指針',將const讀作‘常量'的話,內容正好相符。int const * n;是常量指針,int *const n;是指針常量。

指向常量的常指針

是以上兩種的聯合,指針指向的地位不克不及轉變而且也不克不及經由過程這個指針轉變變量的值,然則仍然可以經由過程其他的通俗指針轉變變量的值。

const int* const p;
3、潤飾函數的參數

依據常量指針與指針常量,const潤飾函數的參數也是分為三種情形

1、避免修正指針指向的內容

void StringCopy(char *strDestination, const char *strSource);
個中 strSource 是輸出參數,strDestination 是輸入參數。給 strSource 加上 const 潤飾後,假如函數體內的語句試圖修改 strSource 的內容,編譯器將指失足誤。

2、避免修正指針指向的地址

void swap ( int * const p1 , int * const p2 )
指針p1和指針p2指向的地址都不克不及修正。

3、以上兩種的聯合。

4、潤飾函數的前往值

假如賜與“指針傳遞”方法的函數前往值加 const 潤飾,那末函數前往值(即指針)的內容不克不及被修正,該前往值只能被賦給加const 潤飾的同類型指針。
例如函數

const char * GetString(void);
以下語句將湧現編譯毛病:

char *str = GetString();
准確的用法是

const char *str = GetString();
5、潤飾全局變量

全局變量的感化域是全部文件,我們應當盡可能防止應用全局變量,認為一旦有一個函數轉變了全局變量的值,它也會影響到其他援用這個變量的函數,招致除bug後很難發明,假如必定要用全局變量,我們應當盡可能的應用const潤飾符停止潤飾,如許方法不用要的認為修正,應用的辦法與部分變量是雷同的。

以上就是const症結字的全體用法願望對年夜家靈巧應用const症結字有所贊助

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved