你不知道的c語言之為什麼陣列的大小不能是變數

2021-07-05 04:42:56 字數 766 閱讀 5403

你不知道的c

語言之為什麼陣列的大小不能是變數

有如下**

反彙編**如下

我們從上面的反彙編**可看到編譯器會把int a=3,

編譯為 

mov dword ptr[ebp-4],3

雖然變數

a 的值是

3(這只是你認為的,其實程式不執行它的值是未知的vc6.0下為

0),但在編譯期間編譯器為變數a

分配的棧空間

dword ptr[ebp-4]

中的值卻是未知的

but why?

因為「mov dword ptr[ebp-4], 3」 是一條指令,cpu

不執行這條指令,

dword ptr [ebp-4],

中的值就是未知的,變數

a的值就是未知的

如果你現在定義乙個陣列int b[a]; 

那麼編譯器將不能為陣列

b分配空間,如果

cpu不執行

a=3,那麼a

未知,陣列b

的大小未知,編譯器不知道該為

b分配多大空間

現在你知道書上為什麼會說定義陣列時陣列的大小不能是乙個變數了?

注:vc++6.0

C語言之那些你不知道的知識

目錄 定義常量 define 預處理器 const 關鍵字 在 c 中,有兩種簡單的定義常量的方式 使用 define預處理器。使用const關鍵字。下面是使用 define 預處理器定義常量的形式 define identifier value具體請看下面的例項 include define le...

C語言你不知道的事(2)

記錄學習的第八天 今天還是分享一下c語言的一些比較愉快的知識點 1.switch語句中break的重要性 首先呢我們看一下 int x scanf d x switch x 這是一段再正常不過的swich語句 如果我們把所有的break刪掉,會出現什麼情況呢 是編譯報錯?還是什麼?x 嗯哼哼 答案是...

你不知道的 和

開發中,編寫有一定逼格的 是每個程式猿都追求的。經常用來判斷的符號 和 也經常用來定義變數哦,你知道嗎?邏輯與 在有乙個運算元不是布林值的情況下,就不一定返回布林值。比如以下情況 1 第乙個運算元是物件,返回第二個數 var myinfo console.log myinfo 2 輸出22 第二個運...