在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編譯以上**,確實沒有錯誤產生,也沒有給出警告)
C和指標 程式設計練習 第8章
修改問題6 的array offset函式,使它訪問以列為主序的偽陣列,也就是最左邊的下標率先變化.這個新函式array offset2在其他方面與原先的那個函式一樣.例如 假定arrayinfo陣列包含了值3,4,6,1,5,3,3.這些值提示我們所處理的是三維偽陣列.第乙個下標範圍從4 到6 第...
C和指標 程式設計練習 第9章
這個問題的最後部分就是編寫函式 void decrypt char data,char const key 它接受乙個加密過的字串為引數,它的任務是重現原來的資訊.除了它是用於揭秘之外,它的工作原理應該與encrypt 相同 void decrypt char data,char const key...
C和指標 程式設計練習 第9章
標準i o庫並沒有提供一種機制,在列印大整數時用逗號進行分割.在這個練習中,你需要編寫乙個程式,為美元數額列印提供這種功能.函式把乙個數字字串 代表以美分為單位的金額 轉換成美元形式,如下表所示 輸入 輸出 輸入 輸出 null 0.00 12345 123.45 1 0.01 123456 1,2...