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

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

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

我們編寫過類似以下的 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 是一個關(guān)鍵字,用于修飾一個變量,以表示該變量的值不可被修改。在程序中,const 可以用于修飾變量、指針、函數(shù)等不同的對象。

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

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

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

需要注意的是,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ù)

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

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

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

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

//  在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 修飾,因此該修改是被禁止的,并且編譯時會報(bào)錯。

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

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

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

C語言const修飾指針本身

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

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

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

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

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

上述代碼將編譯報(bào)錯,因?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)錯
   return 0;
}

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

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

相關(guān)文章

  • C語言鏈表實(shí)現(xiàn)通訊錄系統(tǒng)課程設(shè)計(jì)

    C語言鏈表實(shí)現(xiàn)通訊錄系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言鏈表實(shí)現(xiàn)通訊錄系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++中如何實(shí)現(xiàn)SSL/TLS加密通信

    C++中如何實(shí)現(xiàn)SSL/TLS加密通信

    在互聯(lián)網(wǎng)時代,確保信息傳輸過程中的機(jī)密性、完整性和可用性成為了開發(fā)者必須考慮的關(guān)鍵因素,在C++網(wǎng)絡(luò)編程中,使用SSL/TLS加密通信是一種常見的做法,它允許客戶端和服務(wù)器之間通過互聯(lián)網(wǎng)安全地交換信息,從而為網(wǎng)絡(luò)通信提供隱私性和數(shù)據(jù)完整性
    2025-01-01
  • C++設(shè)計(jì)模式編程中Template Method模板方法模式的運(yùn)用

    C++設(shè)計(jì)模式編程中Template Method模板方法模式的運(yùn)用

    這篇文章主要介紹了C++設(shè)計(jì)模式編程中Template Method模板方法模式的運(yùn)用,講到了包括模板方法模式中的細(xì)分方法以及適用場景,需要的朋友可以參考下
    2016-03-03
  • C++ STL關(guān)聯(lián)式容器自定義排序規(guī)則的2種方法

    C++ STL關(guān)聯(lián)式容器自定義排序規(guī)則的2種方法

    這篇文章主要介紹了C++ STL關(guān)聯(lián)式容器自定義排序規(guī)則的2種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語言中g(shù)etopt()函數(shù)和select()函數(shù)的使用方法

    C語言中g(shù)etopt()函數(shù)和select()函數(shù)的使用方法

    這篇文章主要介紹了C語言中g(shù)etopt()函數(shù)和select()函數(shù)的使用方法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • 詳解Qt如何加載libxl庫

    詳解Qt如何加載libxl庫

    這篇文章主要介紹了詳解Qt如何加載libxl庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語言內(nèi)存泄露很嚴(yán)重的解決方案

    C語言內(nèi)存泄露很嚴(yán)重的解決方案

    這篇文章主要介紹了C語言內(nèi)存泄露很嚴(yán)重的解決方案,預(yù)防內(nèi)存泄漏問題有多種方法,比如加強(qiáng)代碼檢視、工具檢測和內(nèi)存測試等,下面文章總結(jié)內(nèi)容需要的小伙伴可以參考一下
    2022-05-05
  • cmake添加一個庫的實(shí)現(xiàn)步驟

    cmake添加一個庫的實(shí)現(xiàn)步驟

    本文主要介紹了cmake添加一個庫的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Qt示例教程之用Qt畫一個溫度計(jì)

    Qt示例教程之用Qt畫一個溫度計(jì)

    在Qt繪圖中經(jīng)常需要繪制一些儀表的刻度盤,比如溫度計(jì),下面這篇文章主要給大家介紹了關(guān)于用Qt畫一個溫度計(jì)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • C++中發(fā)送HTTP請求的實(shí)現(xiàn)方式

    C++中發(fā)送HTTP請求的實(shí)現(xiàn)方式

    使用C++編程發(fā)送HTTP請求通常需要使用第三方的HTTP庫或框架,在C++中,有幾個受歡迎的HTTP庫可供選擇,例如Curl、Boost.Beast和cpp-httplib,另外,也可以自己實(shí)現(xiàn)socket來發(fā)送http請求,需要的朋友可以參考下
    2024-04-04

最新評論