C 用輸入的變數作為陣列長度是壞習慣嗎?

時間 2021-05-30 11:46:28

1樓:魔法偽娘帕秋莉

推薦這樣

std::vector mukyu(len, initial_value);

沒有多花幾個字元,還可以一口氣初始化成同個東西。

2樓:禽牙

變長陣列屬於c99標準,號稱相容c的c++不支援這個特性,這一腔悲憤向誰說。

g++有擴充套件支援這個特性,所以c++委員會就類似聯合國,有點地盤實力的都不鳥他。

類似氣泡排序這種通用演算法,肯定是不建議用變長陣列,因為棧空間很容易溢位。適用的情況只有在實際工程中,有些地方知道大小範圍,肯定不會棧溢位,這時候才可以放心大膽地使用vla。唯一的作用也就是減小延遲。

所以如果用在對效能不是很敏感的關鍵路徑上,實際意義不大。

3樓:Sayako Hoshimiya

按照標準是的,你這麼寫是得要填乙個constexpr。

但是話說……

為什麼你不把它new(或者如果你堅持malloc……)到堆上……

4樓:Glavo

VLA 不是 C++規範內容,C++ 裡這樣幹事壞習慣。VLA一般的實現是分配在棧上的,如果陣列大小可能很大,那就容易炸了。

5樓:土地測量員

C++是不支援VLA的…這是c99開始有的c語言的特性,能編譯過的話應該是編譯器自己的擴充套件。c++中像題目中那樣在棧上開陣列,陣列的大小應該是乙個編譯期的就確定的值。

所以還是開乙個全域性大陣列(不初始化的話,陣列元素還都會都是0,有些時候還能帶來點方便…)。或者用array、vector,不過考慮到刷題可能會被拖慢速度…

C語言中字元陣列用 初始化?

Elias Wang 我們大致先把概念理清一下 字元陣列 初始化 在宣告變數的同時,為變數分配儲存空間,並初始化資料34 foo string literal 形式,初始化變數位址39 f o o 0 array 形式 賦值 變數已經被宣告,再對變數已有的儲存空間進行操作34 foo string ...

c語言 用scanf s混合輸入int,float,char型變數怎麼會報錯

好問題。首先是太長不看環節。我在這裡給出正確寫法,以便題主直接複製貼上 scanf s a d,b d,c1 c,c2 c,x f,y f,z f a,b c1,1,c2 1,x,y z 如果題主對原理不感興趣,可以跳過這一行之後的所有內容,直接關閉網頁 應用。這是因為scanf s函式對字元和字串...

輸入n,怎麼用c 列印下圖

fronhyan include include include using std cout using std endl using std vector vector v void pretty print vector v void dfs intk intm,vector v else v...