[問題] 用變數宣告陣列

看板C_and_CPP作者 (Pichu)時間14年前 (2009/11/28 21:02), 編輯推噓5(5024)
留言29則, 11人參與, 最新討論串1/5 (看更多)
  大家都知道似乎不能用變數去宣告陣列 像是下面這個例子 === int i; scanf("%d",&i); int arr[i]; === 可是好像沒有人說過為什麼不可以耶 因為剛剛試了一下 也一直沒有出現runtime error 還是其實他現在會自動動態配置然後再自動free -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.182.94

11/28 21:06, , 1F
你去看一下編譯出來的組合語言應該就會了解了...
11/28 21:06, 1F

11/28 21:07, , 2F
宣告的變數跟動態的變數使用的記憶體是不一樣的
11/28 21:07, 2F

11/28 21:18, , 3F
那這個方法能不能用?
11/28 21:18, 3F

11/28 21:22, , 4F
也不是說一定不可以。
11/28 21:22, 4F

11/28 21:27, , 5F
真的要跑應該還是可以跑,可能要看compiler吧我猜
11/28 21:27, 5F

11/28 21:30, , 6F
聽說新的C還是C++標準支援這麼做, 只是沒仔細去研究這塊
11/28 21:30, 6F

11/28 21:31, , 7F
空間怎麼來, 感覺是auto new/delete而已....@_@"
11/28 21:31, 7F

11/28 21:32, , 8F
那變數的範圍要怎麼算呢?算區域還是算動態?
11/28 21:32, 8F

11/28 21:36, , 9F
要去看新標準的spec怎麼說, 或者compiler有以extension
11/28 21:36, 9F

11/28 21:37, , 10F
方式實作的話, 就是去看它的說明manual的解釋....@_@"
11/28 21:37, 10F

11/28 21:47, , 11F
C99可以 C++不行
11/28 21:47, 11F

11/28 21:48, , 12F
C99可以,標準明訂。
11/28 21:48, 12F

11/28 22:29, , 13F
因為:陣列這東西的配置, 在程式啟動時, 會需要一個
11/28 22:29, 13F

11/28 22:29, , 14F
明確的範圍值, 來配置相應的記憶體空間
11/28 22:29, 14F

11/28 22:30, , 15F
至於上面朋友說C99有支援, 這個我就不是很清楚了
11/28 22:30, 15F

11/28 22:31, , 16F
總之如果有需要動態調整陣列大小, 還是請用容器吧
11/28 22:31, 16F

11/29 00:12, , 17F
看書上是寫C99支援,但我還是比較喜歡樓上d大的觀念 :)
11/29 00:12, 17F

11/29 00:23, , 18F
c99支援,c++沒有,至於為什麼c++沒有..阿齋..
11/29 00:23, 18F

11/29 00:25, , 19F
連EC++的作者 Scott Meyers 上上個禮拜都問了這個問題 XD
11/29 00:25, 19F

11/29 00:26, , 20F
「味殺蜜C++0x沒有VLAs?」
11/29 00:26, 20F

11/29 00:26, , 21F
得到的答案是「因為根本沒人提proposal ="=」
11/29 00:26, 21F

11/29 00:41, , 22F
不是因為有vector喔?
11/29 00:41, 22F

11/29 02:23, , 23F
vector並不能完全取代array,在你很重視random access的
11/29 02:23, 23F

11/29 02:23, , 24F
效率的時侯..vector的random access operator []比傳統的
11/29 02:23, 24F

11/29 02:23, , 25F
陣列取值操作慢..
11/29 02:23, 25F

11/29 02:24, , 26F
所以在travel一個很大的vector時,請使用iterator,而不
11/29 02:24, 26F

11/29 02:25, , 27F
要使用for迴圈配上vec[i]這種寫法 因為慢很多
11/29 02:25, 27F

11/29 09:05, , 28F
向樓上的holy兄請教, 很大, 大約多大?QQ 因為我常用v@@
11/29 09:05, 28F

11/30 00:13, , 29F
其實如果要travel整個vector,最好都用iterator
11/30 00:13, 29F
文章代碼(AID): #1B4Hznit (C_and_CPP)
文章代碼(AID): #1B4Hznit (C_and_CPP)