歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言const關鍵字學習

C語言const關鍵字學習

日期:2017/3/1 9:49:28   编辑:Linux編程

在C語言中const關鍵字用來修飾一個變量,它限定一個變量不允許被修改。
const int max_size = 5;

看起來使用const修飾的變量,和使用宏很類似,為何不直接使用宏呢?
#define MAX_SIZE (5)

這是因為和宏比起來:
1. const修飾的是一個變量,所以會在代碼編譯階段進行語法檢查。
而宏只會在預編譯階段進行簡單的替換動作;
2. 使用const修飾的是一個變量,具有具體的數據類型,所以編譯器會進行類型檢查。
3. 可以保護被修飾的東西,防止意外的修改,增強程序的健壯性。
以常見的strcpy函數為例,
#include <string.h>
char *strcpy(char *dest, const char *src);
使用const修飾了char *src參數,這表示在strcpy函數內部是不能向src這個char指針指向的位置寫入數據的。
如果有寫入數據,則編譯器就會報錯。
4. 可以節省內存空間,避免不必要的內存分配。
因為const修飾的是變量,所以在內存中只有一份拷貝;
而宏定義只會在預編譯階段進行簡單的替換動作,所以使用宏的地方都會被替換掉。

關於使用const的幾個問題:
1. const int count = 10;
int array[count] = {0};
以上,編譯器會報錯。
原因是ANSI C規定數組定義時長度必須是常量;
而const修飾的仍然是一個變量。
2. const修飾內容的規則,特別要注意的是const修飾指針時很容易困惑人的.
(1)const char* src;----這裡const修飾的是*src,即src指針指向的內容不能被修改,但指針本身可以隨意指向;
(2)char* const src;----這裡const修飾的是src這個指針,src指針指向了這個地方就不能動了,但是內容可以被修改。
所以關鍵點是:const只修飾其後的變量。
在(1)中,const修飾的變量是*src,*src是char類型數據;
在(2)中,const修飾的是src,src是char*類型數據。

再一次感覺到存儲器空間布局的重要性,後面一定要找時間學習這一塊。


Copyright © Linux教程網 All Rights Reserved