1. 程式人生 > >const變數不能初始化陣列長度

const變數不能初始化陣列長度

  為什麼下面的例子在使用一個const變數來初始化陣列,ANSI C的編譯器會報告一個錯誤呢? 
  const int n = 5;
  int a[n];
  答案與分析:
  1) 這個問題討論的是“常量”與“只讀變數”的區別。常量肯定是隻讀的,例如5, "abc",等,肯定是隻讀的,因為常量是被編譯器放在記憶體中的只讀區域,當然也就不能夠去修改它。而“只讀變數”則是在記憶體中開闢一個地方來存放它的值,只不過這個值由編譯器限定不允許被修改。C語言關鍵字const就是用來限定一個變數不允許被改變的修飾符(Qualifier)。上述程式碼中變數n 被修飾為只讀變數,可惜再怎麼修飾也不是常量。而ANSI C規定陣列定義時長度必須是“常量”,“只讀變數”也是不可以的。
  2) 注意:在ANSI C中,這種寫法是錯誤的,因為陣列的大小應該是個常量,而const int n,n只是一個變數(常量 != 不可變的變數,但在標準C++中,這樣定義的是一個常量,這種寫法是對的),實際上,根據編譯過程及記憶體分配來看,這種用法本來就應該是合理的,只是 ANSI C對陣列的規定限制了它。
  3) 那麼,在ANSI C 語言中用什麼來定義常量呢?答案是enum型別和#define巨集,這兩個都可以用來定義常量。 

二樓的回答言簡意賅,可惜我當時沒能理解。

原文連結地址:

http://baike.baidu.com/view/1065598.html?fromTaglist

--------------------------------------------------------------------------------------------------------------------------------------