欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C語言中const關(guān)鍵字的用法

 更新時間:2020年05月28日 16:41:43   作者:xingjiarong  
這篇文章主要對C語言中const關(guān)鍵字的用法進(jìn)行了詳細(xì)的分析介紹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

關(guān)鍵字const用來定義常量,如果一個變量被const修飾,那么它的值就不能再被改變,我想一定有人有這樣的疑問,C語言中不是有#define嗎,干嘛還要用const呢,我想事物的存在一定有它自己的道理,所以說const的存在一定有它的合理性,與預(yù)編譯指令相比,const修飾符有以下的優(yōu)點

1、預(yù)編譯指令只是對值進(jìn)行簡單的替換,不能進(jìn)行類型檢查

2、可以保護(hù)被修飾的東西,防止意外修改,增強程序的健壯性

3、編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內(nèi)存的操作,使得它的效率也很高。

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

一、修飾局部變量

const int n=5;
int const n=5;

這兩種寫法是一樣的,都是表示變量n的值不能被改變了,需要注意的是,用const修飾變量時,一定要給變臉初始化,否則之后就不能再進(jìn)行賦值了。

接下來看看const用于修飾常量靜態(tài)字符串,例如:

const char* str="fdsafdsa";

如果沒有const的修飾,我們可能會在后面有意無意的寫str[4]='x'這樣的語句,這樣會導(dǎo)致對只讀內(nèi)存區(qū)域的賦值,然后程序會立刻異常終止。有了const,這個錯誤就能在程序被編譯的時候就立即檢查出來,這就是const的好處。讓邏輯錯誤在編譯期被發(fā)現(xiàn)。

二、常量指針與指針常量

常量指針是指針指向的內(nèi)容是常量,可以有一下兩種定義方式。

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;

需要注意的是,指針常量指向的地址不能改變,但是地址中保存的數(shù)值是可以改變的,可以通過其他指向改地址的指針來修改。

int a=5;
int *p=&a;
int* const n=&a;
*p=8;

區(qū)分常量指針和指針常量的關(guān)鍵就在于星號的位置,我們以星號為分界線,如果const在星號的左邊,則為常量指針,如果const在星號的右邊則為指針常量。如果我們將星號讀作‘指針',將const讀作‘常量'的話,內(nèi)容正好符合。int const * n;是常量指針,int *const n;是指針常量。

指向常量的常指針

是以上兩種的結(jié)合,指針指向的位置不能改變并且也不能通過這個指針改變變量的值,但是依然可以通過其他的普通指針改變變量的值。

const int* const p;

三、修飾函數(shù)的參數(shù)

根據(jù)常量指針與指針常量,const修飾函數(shù)的參數(shù)也是分為三種情況

1、防止修改指針指向的內(nèi)容

void StringCopy(char *strDestination, const char *strSource);

其中 strSource 是輸入?yún)?shù),strDestination 是輸出參數(shù)。給 strSource 加上 const 修飾后,如果函數(shù)體內(nèi)的語句試圖改動 strSource 的內(nèi)容,編譯器將指出錯誤。

2、防止修改指針指向的地址

void swap ( int * const p1 , int * const p2 )

指針p1和指針p2指向的地址都不能修改。

3、以上兩種的結(jié)合。

四、修飾函數(shù)的返回值

如果給以“指針傳遞”方式的函數(shù)返回值加 const 修飾,那么函數(shù)返回值(即指針)的內(nèi)容不能被修改,該返回值只能被賦給加const 修飾的同類型指針。

例如函數(shù)

const char * GetString(void);

如下語句將出現(xiàn)編譯錯誤:

char *str = GetString();

正確的用法是

const char *str = GetString();

五、修飾全局變量

全局變量的作用域是整個文件,我們應(yīng)該盡量避免使用全局變量,以為一旦有一個函數(shù)改變了全局變量的值,它也會影響到其他引用這個變量的函數(shù),導(dǎo)致除了bug后很難發(fā)現(xiàn),如果一定要用全局變量,我們應(yīng)該盡量的使用const修飾符進(jìn)行修飾,這樣方式不必要的以為修改,使用的方法與局部變量是相同的。

以上就是const關(guān)鍵字的全部用法希望對大家靈活運用const關(guān)鍵字有所幫助

相關(guān)文章

  • C語言實現(xiàn)維吉尼亞密碼的示例代碼

    C語言實現(xiàn)維吉尼亞密碼的示例代碼

    維吉尼亞密碼(又譯維熱納爾密碼)是使用一系列凱撒密碼組成密碼字母表的加密算法,屬于多表密碼的一種簡單形式。本文將用C語言實現(xiàn)維吉尼亞密碼,需要的可以參考一下
    2022-11-11
  • 基于epoll的多線程網(wǎng)絡(luò)服務(wù)程序設(shè)計

    基于epoll的多線程網(wǎng)絡(luò)服務(wù)程序設(shè)計

    這篇文章主要為大家詳細(xì)介紹了基于epoll的多線程網(wǎng)絡(luò)服務(wù)程序設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++中cin的用法詳細(xì)

    C++中cin的用法詳細(xì)

    這篇文章主要介紹了C++中cin的用法詳細(xì),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C++在非面向?qū)ο蠓矫鎸語言的擴充

    C++在非面向?qū)ο蠓矫鎸語言的擴充

    C++是一種面向?qū)ο缶幊陶Z言,但它也可以作為C語言的擴展語言。在C++中,我們可以使用非面向?qū)ο蠓矫娴奶匦詠頂U展C語言。在本文中,我們將討論C++在非面向?qū)ο蠓矫鎸語言的擴充
    2023-05-05
  • C++中菱形繼承的解釋與處理詳解

    C++中菱形繼承的解釋與處理詳解

    菱形繼承是多重繼承中跑不掉的,Java拿掉了多重繼承,輔之以接口。C++中雖然沒有明確說明接口這種東西,但是只有純虛函數(shù)的類可以看作Java中的接口,下面這篇文章主要給大家介紹了關(guān)于C++中菱形繼承的解釋與處理的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • 用C語言實現(xiàn)排雷游戲

    用C語言實現(xiàn)排雷游戲

    大家好,本篇文章主要講的是用C語言實現(xiàn)排雷游戲,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C語言運算符及其優(yōu)先級匯總表口訣

    C語言運算符及其優(yōu)先級匯總表口訣

    由于C語言的運算符優(yōu)先級與C++的不完全一樣(主要是增加了幾個運算符),所以這個口訣不能完全實用于C++.但是應(yīng)該能夠兼容,大家可以比較一下他們的區(qū)別應(yīng)該就能夠很快掌握C++的優(yōu)先級的
    2013-07-07
  • VC++編程獲取窗口句柄的方法小結(jié)

    VC++編程獲取窗口句柄的方法小結(jié)

    這篇文章主要介紹了VC++編程獲取窗口句柄的方法,簡單總結(jié)分析了VC++獲取窗口句柄的常見函數(shù)與使用技巧,需要的朋友可以參考下
    2017-07-07
  • C語言各種符號的使用介紹上篇

    C語言各種符號的使用介紹上篇

    C 語言的基本符號就有 20 多個,每個符號可能同時具有多重含義,而且這些符號之間相互組合又使得 C 語言中的符號變得更加復(fù)雜起來
    2022-08-08
  • C語言每日練習(xí)之字符串反轉(zhuǎn)

    C語言每日練習(xí)之字符串反轉(zhuǎn)

    這篇文章主要介紹了C語言字符串反轉(zhuǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11

最新評論