變數初始化陣列大小:C 常數表達式的悖論
在C 中,使用const int 宣告數組的大小既可以是允許的,也可以是禁止的。考慮以下範例:
<code class="cpp">const int size = 2; int array[size] = {0}; // Valid</code>
<code class="cpp">int a = 2; const int size = a; int array[size] = {0}; // Compile error</code>
關鍵的差異在於大小的初始化。第一個範例使用常數表達式 (2) 在編譯時設定大小。這允許編譯器在編譯期間為數組保留記憶體。
相反,第二個範例使用變數 (a) 來初始化大小。這不是常數表達式,因此編譯器直到運行時才能確定數組大小。導致編譯時無法進行記憶體分配,導致編譯錯誤。
這個限制並不是純粹的技術限制。 C 委員會有意禁止變數初始化陣列大小,以確保程式碼穩定性和效率。它消除了動態更改數組大小的可能性,動態更改數組大小可能會導致未定義的行為和記憶體損壞。
透過將陣列大小限制為常數表達式,C 開發人員被迫在編譯期間確定陣列的大小。這消除了不確定性並增強了程式碼可靠性。雖然這個限制看起來過於嚴格,但它最終有助於 C 程序的安全性和可預測性。
以上是為什麼我不能在 C 中使用變數來初始化陣列大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!