
本期來講解一個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;}
運行結果:
標簽: