首頁  >  文章  >  後端開發  >  為什麼不能用 C 中的 `const int` 變數初始化陣列大小?

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

Susan Sarandon
Susan Sarandon原創
2024-10-28 05:29:02624瀏覽

Why Can't Array Sizes Be Initialized with `const int` Variables in C  ?

為什麼有時會強制使用 Const Int 來限制陣列大小?

在 C 中,可以使用常數整數指定陣列大小。然而,這種靈活性是有限制的,如以下範例所示:

<code class="cpp">const int size = 2;
int array[size] = {0}; // Allowed</code>
<code class="cpp">int a = 2;
const int size = a;
int array[size] = {0}; // Compile Error</code>

為什麼第一個範例編譯成功而第二個範例失敗?

說明

C 標準根據用於初始化大小的表達式的性質規定了這些數組大小限制。

常數表達式

在第一個範例中, const int size = 2;是常數表達式,因為 size 的值在編譯時已知。由於編譯器知道數組大小,因此可以在編譯期間分配必要的記憶體。

非常量表達式

在第二個範例中,const int size = a;不是常數表達式,因為 a 的值直到運行時才確定。這可以防止編譯器在編譯期間知道數組大小,從而無法在編譯時分配記憶體。

不變性是不相關的

請注意,第二個範例仍然具有有效的大小常數值,但是編譯器不考慮這一點。規則重點在於所使用的表達式類型,int a = 2;使用可變變量,使其成為非常量表達式。

流分析複雜度

允許編譯時分配的運行時初始化將需要流分析。編譯器需要區分以下表達式:

<code class="cpp">int a = 2;
const int size = a;</code>

<code class="cpp">int a = foo();
const int size = a;</code>

,其中大小表達式相同,但實際值取決於執行時間行為。 C 委員會認為這種複雜性是不必要的。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn