首頁 > 後端開發 > C++ > 主體

為什麼我不能在 C 中使用 `const int` 變數初始化陣列大小?

Susan Sarandon
發布: 2024-10-28 21:17:30
原創
854 人瀏覽過

Why Can't I Initialize an Array Size with a `const int` Variable in C  ?

使用const int 初始化數組大小的難以捉摸的困境

在C 領域,使用常數進行數組大小初始化通常會帶來問題一個令人費解的兩難。雖然某些情況下無縫地允許這種做法,但其他情況下會引發神秘的編譯錯誤。

考慮以下程式碼片段:

<code class="cpp">const int size = 2;
int array[size] = {0};</code>
登入後複製

在這個範例中,編譯器很高興地允許使用大小由常數變數「size」指定。原因在於「size」初始化表達式的性質。它是一個常數表達式,這意味著它可以完全在編譯時求值。這使得編譯器可以在編譯過程中確定數組的確切大小,從而方便記憶體分配。

對比上面,看一下這個片段:

<code class="cpp">int a = 2;
const int size = a;
int array[size] = {0};</code>
登入後複製

這裡,編譯器發脾氣,哀嘆「編譯錯誤」。問題的關鍵在於用於初始化“size”的表達式。它涉及一個非常量變數(“a”)。這將表達式降級為非常量表達式的領域。因此,編譯器無法在編譯時確定陣列的大小。

此行為源自於 C 標準委員會的一項基本決定。委員會優先考慮簡單性和明確性而不是靈活性。實作後者需要複雜的流程分析,區分不可修改的表達式,例如「const int size = a;」以及真正的非常量表達式,例如「const int size = foo();」。這種複雜性被認為是不可取的。

因此,規則仍然存在:陣列大小只能使用常數表達式初始化。這確保編譯器可以明確地確定數組的大小,從而確保可預測的記憶體分配和順利編譯。當冒險進入數組大小初始化的世界時,請始終牢記這條規則。

以上是為什麼我不能在 C 中使用 `const int` 變數初始化陣列大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!