博主我在剛讀大一學習c語言的時候,寫過這樣一段**:
#
include
intmain
(void
)
很明顯,我是想從鍵盤讀入乙個整數n,然後定義乙個大小為n的整性陣列。當時程式的執行環境是vc6.0,這個程式不能通過編譯,理由是定義陣列大小時n必須是const的,查閱書籍教科書上、詢問老師都是同樣的回答。
今天又一次寫了這個程式,神奇的發現它是可以通過編譯的。查閱了一番資料,原來是從前的vc6.0編譯器版本比較舊,不支援c99標準。在c99標準中,不定長陣列(柔性陣列)被支援了,可以通過乙個變數動態為陣列分配大小。
雖然這個特性以後也許並不會用,但是還是值得記錄一下,感慨一下從前學習程式設計的惡劣環境。教科書、老師甚至連編譯器也是不靠譜的,自己也連標準也分不清就在悶頭學習。感覺程式設計路上規劃好一條正確的學習路線實在是重中之重。
linux中 不定長陣列 柔性陣列(c99支援)
free a 只是將指標a指向的連續記憶體區域,標記為可被再分配。malloc 和 free是在heap中,記錄了分配的記憶體起始位址和長度。實現過程,參照支援c庫的os系統。struct example attribute packed 與struct example attribute pack...
C99標準之前沒有bool型別(C99提供)
我們知道在c 裡有專門的bool型別,用來表示真或假。但是在c語言裡沒有這樣的型別。表示式的值0為假,非0為真。所以條件判斷語句 if while 非常靈活,甚至乙個指標型別都可以是條件表示式。為了使程式更清晰,我們常常會給出如下的巨集定義 typedef int bool define true ...
C99標準中的 main 函式
一 main 函式的形式 在最新的 c99 標準中,只有以下兩種定義方式是正確的 int main void 無引數形式 int main int argc,char argv 帶引數形式 int指明了main 函式的返回型別,函式名後面的圓括號一般包含傳遞給函式的資訊。void表示沒有給函式傳遞引...