第1章之編程練習心得20140702

在C語言中,定義一個數組時,必須同時指定數組的大小,如

unsigned char department[];

那麼VS會提示,不允許使用不完整的類型,department是未知的大小。

也不能用變量去指定數組大小,如

int a =100;

unsigned char department[a];

這樣也會報錯。


解決辦法:

爲了方便日後維護,可以使用define

#define MAX_INPUT 100

unsigned char department[MAX_INPUT];

突然想到const可以定義一個常量,那麼是不是可以定義 

const int MAX_INPUT=100;(注意有分號,與define不一樣)

這時VS會報錯,error C2057: 應輸入常量表達式。這是因爲:

關鍵字const並不能把變量變成常量,在一個符號前加上const限定符只是表示這個符號不能被賦值。也就是它的值對於這個符號來說是隻讀的,但它並不能防止通過程序的內部(或者是外部)的方法來修改這個值(通過地址來修改,不能通過對該符號賦值修改)。const理解爲readonly,即 只讀變量 更確切點,再怎麼修飾,MAX_INPUT也不是常量。


但是在標準C++中,const定義的是一個常量,這種寫法是對的。實際上,根據編譯過程及內存分配編譯器通常不爲普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成爲一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高來看,這種用法本來就應該是合理的,只是ANSI C對數組的規定限制了它(實際上用GCC或VS2005編譯以上代碼,確實沒有錯誤產生,也沒有給出警告)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章