C語言中const關鍵字的妙用總結

2020-12-06 C語言知識傳播者
請看正文

學習了多年的C語言,你對const關鍵字的使用全都掌握了嗎?在編程實踐中你對const的使用是否有困惑呢?今天就給大家一起來探討總結,期望能夠大家解惑並提供參考。

C語言中const關鍵字是constant的縮寫,通常翻譯為常量、常數等,有些朋友一看到const關鍵字馬上就想到了常量。事實上在C語言中const功能很強大,它可以修飾變量、數組、指針、函數參數等。本文將針對上述幾種修飾功能詳細做一個總結。

1、 修飾變量:

C語言中採用const修飾變量,功能是對變量聲明為只讀特性,並保護變量值以防被修改。舉例說明如下:

const int i = 5;

上面這個例子表明,變量i具有隻讀特性,不能夠被更改;若想對i重新賦值,如i = 10;則是錯誤的。

值得注意的是,定義變量的同時,必須初始化。定義形式也可以寫成int const i=5,同樣正確。

此外,const修飾變量還起到了節約空間的目的,通常編譯器並不給普通const只讀變量分配空間,而是將它們保存到符號表中,無需讀寫內存操作,程序執行效率也會提高。

2、 修飾數組

C語言中const還可以修飾數組,舉例如下:

const int array[5] = {1,2,3,4,5};

array[0] = array[0]+1; //錯誤

數組元素與變量類似,具有隻讀屬性,不能被更改;一旦更改,如程序將會報錯。

3、 修飾指針

C語言中const修飾指針要特別注意,共有兩種形式,一種是用來限定指向空間的值不能修改;另一種是限定指針不可更改。舉例說明如下:

int i = 5;

int j = 6;

int k = 7;

const int * p1 = &i; //定義1

int * const p2 =&j; //定義2

上面定義了兩個指針p1和p2。

在定義1中const限定的是*p1,即其指向空間的值不可改變,若改變其指向空間的值如*p1=20,則程序會報錯;但p1的值是可以改變的,對p1重新賦值如p1=&k是沒有任何問題的。

在定義2中const限定的是指針p2,若改變p2的值如p2=&k,程序將會報錯;但*p2,即其所指向空間的值可以改變,如*p2=80是沒有問題的,程序正常執行。

4、 修飾函數參數

const關鍵字修飾函數參數,對參數起限定作用,防止其在函數內部被修改。所限定的函數參數可以是普通變量,也可以是指針變量。舉例如下:

void fun1(const int i)

{

其它語句

……

i++; //對i的值進行了修改,程序報錯

其它語句

}

void fun2(const int *p)

{

其它語句

……

(*p)++; //對p指向空間的值進行了修改,程序報錯

其它語句

}

好了,關於const的用法今天就總結到這,如果大家有任何疑問請留言探討。我是「C語言知識傳播者」,志在瞄準C語言,挖掘和總結C語言的難點和痛點,給C語言編程愛好者和本領域從業人員提供參考,我會用心總結C語言知識的點點滴滴,您的關注是我持續創作的動力,請收藏本文、轉發並點讚,希望得到您的持續關注,謝謝!

相關焦點

  • C語言之const和volatile"究極"學習
    關於const的用法,現在大概前前後後應該寫了有兩篇文章,以前學習的時候,用法體會不是那麼深刻,為啥這麼說呢,因為在學習c++的時候,會發現const關鍵字有新的玩法,關於這個新的玩法,大家可以去看最近學習總結寫的c++文章專輯。
  • ARM中ADS環境下C語言和彙編語言混合編程及示例
    下面是一個例子來說明如何在C中內嵌彙編語言  C語言文件.c httphi.baidu.comprocatlaw  #include stdio.h  void my_strcpy(const char src, char dest){  char ch;  __asm{  loop
  • DSP編程技巧之17---非常「關鍵」的關鍵字
    什麼是「關鍵字」?關鍵字就是已被C語言本身使用,不能作其它用途使用的字,例如關鍵字不能用作變量名、函數名等。那「關鍵字」到底有多關鍵?簡單得說,就是如果不掌握它們的使用方法,程序就不能按照我們的設計產生預期的結果。
  • Go語言的學習筆記(第二章)
    Go語言中標識符由字母數字和_(下劃線)組成,並且只能以字母和_開頭。舉幾個例子:abc, _, _123, a123。關鍵字關鍵字是指程式語言中預先定義好的具有特殊含義的標識符。(在Lua等程式語言裡,匿名變量也被叫做啞元變量。)注意事項:函數外的每個語句都必須以關鍵字開始(var、const、func等):=不能使用在函數外。
  • 快速上手系列-C語言之基礎篇(一)
    若干個make文件:make文件描述了多個文件中的依賴關係以及生成最終可執行文件或庫文件所需要的信息。由於篇幅較小,再加點內容,順便寫寫C語言的關鍵字和控制語句。1、關鍵字:這裡介紹下C語言的32個關鍵字(至於ISO推出的C99標準新增的5個C語言關鍵字和C11標準新增了7個C語言關鍵字目前沒有做過過多了解,這裡就不再介紹)(1)數據類型關鍵字(12個)
  • C/C+編程筆記:C語言編程面試常見問題,全是經典題!
    C是一種過程語言。C語言的主要功能包括對內存的低級訪問,簡單的關鍵字集和簡潔的樣式。這些功能使其適用於諸如作業系統或編譯器開發之類的系統編程。 i ++和++ i有什麼區別? 1)表達式「 i ++」返回舊值,然後遞增i。
  • C語言 volatile 關鍵字在編譯優化過程中有何作用
    今天講述的話題就是關於代碼優化中,關鍵字volatile在優化過程中起到的作用。 一、關鍵字 volatile 是什麼? 在中斷例程或信號處理程序中訪問全局變量。 在跑系統的項目中,線程間共享的全局變量,建議都加上volatile關鍵字,這一點,很多人沒有在意。
  • JavaScript中常用es6語法整理總結
    1.let(變量) 與 const(常量)在es6中我們通常用let來定義變量和const來定義常量 ,它們都是塊級作用域 ,在同一個代碼塊中不允許重複聲明它們的特點與var的區別:var在JavaScript中之前定義變量,我們用 var
  • 在C語言中如何高效地複製和連接字符串?
    就目前而言,在編程領域中,C語言的運用非常之多,它兼顧了高級語言的彙編語言的優點,相較於其它程式語言具有較大優勢。作者 | Martin Sebor譯者 | 蘇本如,責編 | 劉靜以下為譯文:在所有標準C語言<string.h>頭文件中聲明的字符串處理函數中,最常用的是那些用來複製和連接字符串的函數。
  • 十分鐘理解C ++中的運算符重載
    在C ++中,我們可以使運算符為用戶定義的類工作。這意味著C ++能夠為運算符提供數據類型的特殊含義,這種能力稱為運算符重載。唯一的區別是,運算符的名稱始終是運算符關鍵字,後跟運算符的符號,並且在使用相應的運算符時會調用運算符功能。以下是全局運算符功能的示例。
  • C語言的一些高級議題
    指針是C語言的靈魂,我們經常聽到這樣的說法,當我們初學C語言的時候,似乎覺得也沒有什麼,但是當你越來越深入的了解它,你就會發現C語言的強大有時甚至超乎你的想像。C語言作為一種相對較為底層的語言,在某些方面有著不可替代的優勢。
  • C語言陷阱與技巧31節,都說void*指針是「萬能指針」,它萬能在哪
    在C語言程序開發中,一些比較成熟的庫函數常常會被使用。畢竟,如果手邊就有不錯的「輪子」可以用,沒有程式設計師願意再花費精力憑空造一個輪子出來。,不過不知道讀者注意到沒,有些庫函數的參數是 void * 類型的,例如:void *memcpy(void *dest, constvoid *src, size_t n);void *memmove(void *dest, constvoid *src, size_t n);前面的章節在討論C語言指針時,提到指針從某種程度上來說,
  • 用C語言實現FFT算法
    main programe********************/#includemath.h>#includestdio.h>#includestdlib.h>#include typedef.hfloat result[257];struct compx s[257];int Num=256 ;const
  • C語言基礎教學檔案!編號零零肆
    C語言令牌每個C程序都是一組指令,每個指令都是一些單獨的單元的集合。每個最小的單個AC程序單元稱為令牌。AC程序(用來定義電腦程式的形式語言)中的每條指令都是令牌的集合。令牌用於構建c程序,它們被稱為AC程序的基本構建塊。
  • 最全的C語言基礎知識都在這了
    2、main()----在c語言中稱之為「主函數」,一個c程序有且僅有一個main函數,任何一個c程序總是從main函數開始執行,main函數後面的一對圓括號不能省略。3、被大括號{ }括起來的內容稱為main函數的函數體,這部分內容就是計算機要執行的內容。
  • C+基礎知識篇:C+常量
    字符常量 字符常量是括在單引號中。如果常量以 L(僅當大寫時)開頭,則表示它是一個寬字符常量(例如 L'x'),此時它必須存儲在 wchar_t 類型的變量中。否則,它就是一個窄字符常量(例如 'x'),此時它可以存儲在 char 類型的簡單變量中。
  • 單片機c語言教程:C51運算符和表達式
    這個語句就是 typedef,這是個很好用的語句,但我卻不常用它,通常我定義變量的數據類型時都是使 用標準的關鍵字,這樣別人能很方便的研讀你的程序。如果你是個DELPHI 編程愛好者或是DELPHI程式設計師,你對變量的定義也許習慣了DELPHI 的關鍵字,如 int 類型常會用關鍵字Integer來定義,在用 單片機c語言時你還想用回這個的話,你能這樣寫:本文引用地址:http://www.eepw.com.cn/article/170888.htmtypedef int integer;
  • C語言基礎知識學習(一)
    標識符在程序中使用的變量名、函數名、數組名、指針名、標號等稱為標識符.標識符分類a) 關鍵字原先的C89標準中只有32個關鍵字然後在1999年之後進行了兩次技術修正,新出臺了C99標準新增加了5個關鍵字 分別是:restrict, inline, _Complex, _Imaginary, _Bool
  • c語言結構體數組初始化
    最近看一段代碼有所迷惑,先簡單總結一下。mode,u16 au)",(void*)mf_unlink,"u8 mf_unlink(u8 *pname)",(void*)mf_rename,"u8 mf_rename(u8 *oldname,u8* newname)",(void*)mf_gets,"void mf_gets(u16 size)",(void*)mf_putc,"u8 mf_putc(u8 c)