在 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中文網其他相關文章!