最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言const的4種用法實(shí)例

 更新時(shí)間:2025年09月03日 10:46:57   作者:C語言中文網(wǎng)  
C語言中const用于禁止修改數(shù)組元素、指針內(nèi)容或基本變量,修飾位置不同,本文就來介紹一下C語言const的4種用法實(shí)例,具有一定的參考價(jià)值,感興趣的可以了解一下

我們編寫過類似以下的 C 語言代碼,用于修改字符數(shù)組中的值:

char str[20] = "hello\n";
printf("%s", str);
str[0] = 'H';
printf("%s", str);

那么,我們?nèi)绻虢箶?shù)組 str 的元素被修改,應(yīng)該怎樣做呢?

C語言const修飾數(shù)組元素

在 C語言中,const 是一個(gè)關(guān)鍵字,用于修飾一個(gè)變量,以表示該變量的值不可被修改。在程序中,const 可以用于修飾變量、指針、函數(shù)等不同的對(duì)象。

因此,為了讓數(shù)組不被修改,我們可以在原來的代碼char str[20] = "hello\n"前面加上 const 關(guān)鍵字,例如:

const char str[20] = "hello\n";

當(dāng)使用 const 關(guān)鍵字修飾 char 時(shí),char 將被禁止修改。數(shù)組 str 的元素 char 無法被修改,如果后續(xù)的語句嘗試修改數(shù)組元素,編譯器將報(bào)錯(cuò)。

需要注意的是,const 關(guān)鍵字可以放在 char 旁邊,無論放在 char 的左邊還是右邊,都具有相同的效果。下面兩種寫法是等效的:

const char str[20] = "hello\n";
char const str[20] = "hello\n";

這樣,我們就成功地保護(hù)了數(shù)組 str 的元素不被修改。

C語言const修飾指針?biāo)赶虻臄?shù)據(jù)

下面程序展示了一個(gè)錯(cuò)誤示例,該示例嘗試修改字符常量,導(dǎo)致程序運(yùn)行出錯(cuò):

#include <stdio.h>
int main()
{
    char *pStr = "hello\n";
    printf("%s", pStr);
    pStr[0] = 'H';
    printf("%s", pStr);
    return 0;
}

上面的代碼試圖通過指針 pStr 修改字符串常量 "hello\n"。然而,編譯器在編譯階段并不會(huì)報(bào)錯(cuò),錯(cuò)誤只在運(yùn)行時(shí)才會(huì)暴露。那么,如何在編譯時(shí)就發(fā)現(xiàn)這個(gè)錯(cuò)誤呢?

我們可以使用 const 關(guān)鍵字修飾指針?biāo)赶虻?char。這樣,如果嘗試修改指針?biāo)赶虻?char,編譯器將報(bào)錯(cuò)。例如:

//  在char左邊增加const關(guān)鍵字
const char *pStr = "hello\n";

下圖展示了在 Visual Studio 中編寫使用 const 關(guān)鍵字修飾 char*pStr 的效果:

圖 1 const關(guān)鍵字修飾char *pStr

第六行語句 pStr[0] = 'H' 嘗試修改指針?biāo)赶虻?char 內(nèi)容。但在之前的聲明中,char 已被關(guān)鍵字 const 修飾,因此該修改是被禁止的,并且編譯時(shí)會(huì)報(bào)錯(cuò)。

當(dāng)然,將 const 關(guān)鍵字放置在 char 右邊也能起到同樣的效果。

//  char右邊增加const關(guān)鍵字
char const *pStr = "hello\n";

這樣,我們可以在編譯階段發(fā)現(xiàn)錯(cuò)誤,避免程序運(yùn)行時(shí)出現(xiàn)問題。

C語言const修飾指針本身

那么,如果將 const 放到 * 的右邊呢?例如:

//  在星號(hào)*右邊增加const關(guān)鍵字
char * const pStr = "hello\n";

程序是可以成功編譯的,說明 const 關(guān)鍵字并沒有對(duì) char 產(chǎn)生作用。既然程序編譯通過了,那么 const 關(guān)鍵字的作用在哪里呢?

實(shí)際上,在這種情況下,const 關(guān)鍵字修飾了 *,也就是指針 pStr 本身的值。這意味著,在初始化后,指針 pStr 本身的值無法被修改。例如:

char * const pStr = "hello\n";
pStr = NULL;

上述代碼將編譯報(bào)錯(cuò),因?yàn)?const 關(guān)鍵字修飾了指針本身,這意味著指針無法被重新賦值或修改。

C語言const修飾基本變量

當(dāng)然,const 關(guān)鍵字也可以修飾基本變量,例如:

#include <stdio.h>
int main()
{
   const int n = 100;
   n = 101;    //  這一行報(bào)錯(cuò)
   return 0;
}

在這個(gè)例子中,const 關(guān)鍵字修飾了 int 類型的變量 n。變量 n 的值在初始化后只能讀取,不能修改。嘗試修改變量 n 的值將導(dǎo)致編譯報(bào)錯(cuò)。

到此這篇關(guān)于C語言const的4種用法實(shí)例的文章就介紹到這了,更多相關(guān)C語言const用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • QT 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能

    QT 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能

    本文介紹了如何使用QT技術(shù)實(shí)現(xiàn)一個(gè)具有動(dòng)態(tài)效果的隨機(jī)驗(yàn)證碼系統(tǒng),詳述了CaptchaMovableLabel和CaptchaLabel兩個(gè)自定義類的功能,包括顯示和拖動(dòng)字母、繪制噪音點(diǎn)和線條、以及隨機(jī)生成字母等,講解了如何通過繼承QWidget和QLabel來實(shí)現(xiàn)這些功能,并通過MainWindow創(chuàng)建界面
    2024-10-10
  • C++中::SHCreateDirectoryEx函數(shù)使用方法

    C++中::SHCreateDirectoryEx函數(shù)使用方法

    ::SHCreateDirectoryEx用于創(chuàng)建多級(jí)目錄,類似于mkdir -p命令,本文主要介紹了C++中::SHCreateDirectoryEx函數(shù)使用方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • C語言中雙鏈表的基本操作

    C語言中雙鏈表的基本操作

    這篇文章主要介紹了C語言中雙鏈表的基本操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++11的操作符alignof使用詳解

    C++11的操作符alignof使用詳解

    這篇文章主要介紹了C++11的操作符alignof使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-10-10
  • C++線程親和性優(yōu)化指南分享

    C++線程親和性優(yōu)化指南分享

    線程親和性通過綁定線程到特定CPU核心,減少遷移開銷,提升緩存命中率和性能,適用于多核、NUMA架構(gòu),實(shí)現(xiàn)方式包括Linux的pthread庫和Windows的API,需注意負(fù)載均衡、超線程及系統(tǒng)拓?fù)?建議結(jié)合工具驗(yàn)證效果
    2025-09-09
  • c++元編程模板函數(shù)重載匹配規(guī)則示例詳解

    c++元編程模板函數(shù)重載匹配規(guī)則示例詳解

    這篇文章主要為大家介紹了c++元編程模板函數(shù)重載匹配規(guī)則示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • C語言數(shù)據(jù)在內(nèi)存中的存儲(chǔ)流程深入分析

    C語言數(shù)據(jù)在內(nèi)存中的存儲(chǔ)流程深入分析

    使用編程語言進(jìn)行編程時(shí),需要用到各種變量來存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-10-10
  • STL 的string類怎么啦

    STL 的string類怎么啦

    在我們研究string類犯了什么毛病之前,還讓我先說一下如何了解一個(gè)C++的類。我們要了解一個(gè)C++的類,一般來說,要從三個(gè)方面入手
    2013-11-11
  • OpenCV使用鼠標(biāo)響應(yīng)裁剪圖像

    OpenCV使用鼠標(biāo)響應(yīng)裁剪圖像

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)鼠標(biāo)響應(yīng)裁剪圖像,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 詳解C語言中函數(shù)宏的三種封裝方式

    詳解C語言中函數(shù)宏的三種封裝方式

    函數(shù)宏,即包含多條語句的宏定義,其通常為某一被頻繁調(diào)用的功能的語句封裝,且不想通過函數(shù)方式封裝來降低額外的彈棧壓棧開銷。本文就來聊聊函數(shù)宏的三種封裝方式吧
    2023-03-03

最新評(píng)論

大荔县| 敦化市| 永新县| 修水县| 灌南县| 镇赉县| 航空| 霍城县| 绵阳市| 都昌县| 买车| 浪卡子县| 英吉沙县| 德格县| 山阴县| 甘泉县| 连江县| 琼海市| 朝阳市| 延庆县| 明星| 准格尔旗| 忻城县| 油尖旺区| 龙海市| 启东市| 大同市| 绥棱县| 大连市| 沁水县| 镇巴县| 长寿区| 思南县| 资源县| 莱西市| 响水县| 乌鲁木齐县| 宣武区| 西林县| 石门县| 大姚县|