C語言const的4種用法實例
我們編寫過類似以下的 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";
當使用 const 關(guān)鍵字修飾 char 時,char 將被禁止修改。數(shù)組 str 的元素 char 無法被修改,如果后續(xù)的語句嘗試修改數(shù)組元素,編譯器將報錯。
需要注意的是,const 關(guān)鍵字可以放在 char 旁邊,無論放在 char 的左邊還是右邊,都具有相同的效果。下面兩種寫法是等效的:
const char str[20] = "hello\n"; char const str[20] = "hello\n";
這樣,我們就成功地保護了數(shù)組 str 的元素不被修改。
C語言const修飾指針所指向的數(shù)據(jù)
下面程序展示了一個錯誤示例,該示例嘗試修改字符常量,導(dǎo)致程序運行出錯:
#include <stdio.h>
int main()
{
char *pStr = "hello\n";
printf("%s", pStr);
pStr[0] = 'H';
printf("%s", pStr);
return 0;
}
上面的代碼試圖通過指針 pStr 修改字符串常量 "hello\n"。然而,編譯器在編譯階段并不會報錯,錯誤只在運行時才會暴露。那么,如何在編譯時就發(fā)現(xiàn)這個錯誤呢?
我們可以使用 const 關(guān)鍵字修飾指針所指向的 char。這樣,如果嘗試修改指針所指向的 char,編譯器將報錯。例如:
// 在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' 嘗試修改指針所指向的 char 內(nèi)容。但在之前的聲明中,char 已被關(guān)鍵字 const 修飾,因此該修改是被禁止的,并且編譯時會報錯。
當然,將 const 關(guān)鍵字放置在 char 右邊也能起到同樣的效果。
// char右邊增加const關(guān)鍵字 char const *pStr = "hello\n";
這樣,我們可以在編譯階段發(fā)現(xiàn)錯誤,避免程序運行時出現(xiàn)問題。
C語言const修飾指針本身
那么,如果將 const 放到 * 的右邊呢?例如:
// 在星號*右邊增加const關(guān)鍵字 char * const pStr = "hello\n";
程序是可以成功編譯的,說明 const 關(guān)鍵字并沒有對 char 產(chǎn)生作用。既然程序編譯通過了,那么 const 關(guān)鍵字的作用在哪里呢?
實際上,在這種情況下,const 關(guān)鍵字修飾了 *,也就是指針 pStr 本身的值。這意味著,在初始化后,指針 pStr 本身的值無法被修改。例如:
char * const pStr = "hello\n"; pStr = NULL;
上述代碼將編譯報錯,因為 const 關(guān)鍵字修飾了指針本身,這意味著指針無法被重新賦值或修改。
C語言const修飾基本變量
當然,const 關(guān)鍵字也可以修飾基本變量,例如:
#include <stdio.h>
int main()
{
const int n = 100;
n = 101; // 這一行報錯
return 0;
}
在這個例子中,const 關(guān)鍵字修飾了 int 類型的變量 n。變量 n 的值在初始化后只能讀取,不能修改。嘗試修改變量 n 的值將導(dǎo)致編譯報錯。
到此這篇關(guān)于C語言const的4種用法實例的文章就介紹到這了,更多相關(guān)C語言const用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中::SHCreateDirectoryEx函數(shù)使用方法
::SHCreateDirectoryEx用于創(chuàng)建多級目錄,類似于mkdir -p命令,本文主要介紹了C++中::SHCreateDirectoryEx函數(shù)使用方法,具有一定的參考價值,感興趣的可以了解一下2025-03-03
c++元編程模板函數(shù)重載匹配規(guī)則示例詳解
這篇文章主要為大家介紹了c++元編程模板函數(shù)重載匹配規(guī)則示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
C語言數(shù)據(jù)在內(nèi)存中的存儲流程深入分析
使用編程語言進行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么2022-10-10

