C語言關鍵字const的幾種用法

2023-06-21 12:23:33 來源:學嵌入式的釘子君

本期來講解一個C語言的關鍵字——const。

主要內容:

結合示例說明const的幾種用法。


(相關資料圖)

適合人群:

C語言初學者、嵌入式萌新。

const是C語言的常用關鍵字之一,是單詞constant(翻譯為“常量的”)的縮寫,它限定一個變量不允許被改變,使用const在一定程度上可以提高程序的安全性和可靠性。

用法:在定義變量時加上const,修飾該變量為常變量。為什么叫做常變量呢? 因為const 修飾的對象原本是變量,但經過修飾將不能直接改變它的值(如常量一般);但又有變量的屬性,所以叫常變量。

Part 1

使用const修飾局部變量

比如在函數中定義以下內容:

const int b = 1;

上方這句話執行后,將不能再對b進行賦值來修改它的值了。所以被const修飾的變量一般需要進行初始化!為其提供初始值。

當const和指針定義結合在一起時,有即種經典組合形式,是必須要掌握的!

char a = "a";    char b = "b";

① const char *p = &a;

(或寫成    char const *q = &a;)

② char * const r = &a;

以上兩種形式的區別在于const修飾的空間不同,

表達式① const是修飾p的空間為只讀,不可以修改p的值,但可以修改p的值。

即 *p = 5; ? p = &b;?

表達式② const是修飾q的空間為只讀,不可以修改q的值,但可以修改*q的值。

即 q = &b;? *q = 5; ?

Part 2

修飾函數的參數

根據const和指針結合形式,const修飾函數的參數也是分為三種情況

1、防止修改指針指向的內容

char *strcpy( char *to, const char *from );

給參數from 加上 const 修飾后,如果函數體內的語句試圖改動指針from所指向的空間,編譯器將指出錯誤。

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

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

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

3、以上兩種的結合。

void func(const int *const p);

這種情況下,在函數體中將不能改變p的值,亦不能改變*p的值。

Part 3

修飾全局變量

全局變量的作用域是整個文件,一般情況下要少用全局變量,若工程中的某一個函數改變了全局變量的值,它也會影響到工程中其他引用這個變量的函數,這導致不易排查bug。若必須使用全局變量,就需要考慮是否給該變量加上const,使其數值不被修改。

比如:

const int global_width = 320;

Part 4

可以修改只讀變量的值嗎?

不能直接通過原標識符修改(變量名),但可以通過非const修飾的指針,間接修改。

#include < stdio.h >int main(void){  const int a = 1;  //被const修飾的變量可以被初始化  int* p = &a;  //a = 2;      //被const修飾的變量不能被直接賦值  *p = 5;        //可通過非const指針間接修改  printf("a = %d\\n", a);  return 0;}

運行結果:

標簽:

上一篇:C語言算法題:反轉一個單向鏈表 全球快播
下一篇:最后一頁