看板 C_and_CPP 關於我們 聯絡資訊
各位前輩 不好意思 小弟是初學C不到一週的人 想請教一個基本的問題 就是可變size的vector該如何寫? 我現在有一個a.h標頭檔 裡面寫了 #define N 10 這樣我在寫其他.c檔時 只要 #include "a.h" 就可以在.c裡面宣告 float temp[N]={0}; 但我現在希望 N 是可變的 例如 mode=1 時 N=10 mode=2 時 N=20 mode=3 時 N=30 於是我把a.h改為 #define N1 10 #define N2 20 #define N3 30 並且在.c裡面寫 int N; if(mode==1) N=N1; else if(mode==2) N=N2; else if(mode==3) N=N3; float temp[N]={0}; 然而這樣卻不行~~別人說array的維度不能是變數 請問要怎麼改 才能將 N 作成可變的呢 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.191.99
ducksteven:malloc 12/17 02:27
VictorTom:關鍵字: 動態配置 或 動態陣列. 12/17 09:03
VictorTom:C++的話, 就有STL的vector可以直接用了XD 12/17 09:04
tyc5116:vector<vector<int> > aa; 12/17 09:33
tyc5116:matrix.resize(s); 12/17 09:33
tyc5116:這樣aa就是s*n的陣列了,n還沒確定,看你需求 12/17 09:34
tyc5116:上面matrix改aa 12/17 09:39
jerrykk:用C++原本的VECTOR就好啦 12/17 10:42
VictorTom:說不定人家要學的是C語言啊XD 12/17 10:46
oddguy:這是C語言的應用阿,原po已經說了是.c 12/17 11:01
AstralBrain:c就直接VLA硬上了啊 根本不成問題 12/17 11:08
VictorTom:初學一週就要人家VLA了嗎Orz 搞不好它的compiler還不支 12/17 11:12
VictorTom:援勒XD 12/17 11:13
AstralBrain:VLA這樣設計就是為了讓user用起來沒感覺啊XD 12/17 11:14
AstralBrain:給新手用也沒什麼不好的 12/17 11:14
AstralBrain:不支援的compiler丟掉算了 今年都2009了... 12/17 11:16
VictorTom:別這麼說嘛, 您瞧瞧看 http://ppt.cc/VM13 XDDD 12/17 11:20
AstralBrain:他們是Visual "C++" 這不一樣 12/17 11:22
VictorTom:後來才注意到他們是在講C++了....Orz 12/17 11:27
vaca1:我用Dev C++寫C耶...樓上各位前輩在講什麼 看不懂 XD 12/17 13:08
james732:VAL就是說,int N = 10; int arr[N]; 是合法的 12/17 13:22
james732:從C99這個標準開始允許這種寫法 但dev-C++可能不支援 12/17 13:23
ledia:variable length array (VLA) 12/17 13:27
johnhmj:「動態記憶體配置」與「動態陣列」兩者意義不太一樣… 12/17 19:01
johnhmj:動態陣列是像 STL vector 那樣的東西… 12/17 19:02
johnhmj:動態記憶體配置是 malloc calloc 以及 new 這幾個東東… 12/17 19:03
johnhmj:不然的話,最簡單的方法就是搞個「鏈結串列」吧!@@||| 12/17 19:06
johnhmj:… Linked List 特性跟動態陣列差不多。 12/17 19:10
johnhmj:另外一個就是,vector增加元素時是砍舊資料,再建一個新的 12/17 19:12
johnhmj:也可以用 malloc 或 new 實作一個 vector 來用。@@||| 12/17 19:14
ledia:樓上, 去查一下, VLA 跟你想的不太一樣, 他是專用名詞了 12/17 22:34
johnhmj:=_=!難道,他所問的問題不是「用C實作vector」嗎? 12/18 06:17
tinlans:純 C 又是動態 size 的真正焦點其實是 realloc() 12/18 06:24