精華區beta Programming 關於我們 聯絡資訊
※ 引述《ji3g45j.bbs@ptt.cc (pig)》之銘言: > ※ 引述《datagram ()》之銘言: > : int main() > : { > : int a=4; > : float uu[a]={0}; > : printf("%f",uu[3]); > : return 0; > : } > : 這個寫法有錯 ,應該是錯在 float uu[a]={0} 這一行 > : 為什麼已經令了 a=4 ,卻不能 把a之值 放入 uu[4]呢? > : 有沒有什麼方法可以解決這種問題? > : 因為我在寫 header檔時, function(X,X,G) > : G是一個int,要丟進此function運作,而此function中設了一個array > : int AA[G]={0}; ==>這會出現錯誤。這種錯誤跟上面也是一樣的錯誤。 > 實際上的編譯結果會讓uu[a]變成uu[4],因為a是常數(如果你編譯器不笨的話) > 但uu[4]所能索引的範圍是uu[0]~uu[3],因此uu[4]是有問題的 > 而你第2個問題必須要用動態記憶體配置,因為你的G是變數 像是 const int offset=4; 這樣把 offset 設定為固定常數, 再用在陣列的 offset 的用法,應是在 C++ 才開始支援的。 我就試著去用 gcc 並加以指定 gcc -std= { c98, c99, c9x, gnu99, gnu9x } 都無法編譯成功阿。 在用 g++ 去編譯相同的程式,不用指定 -std=??,就編譯成功了。 我覺得 C 應該還是不能這樣寫, 不過就如前幾篇提到的 C99,也還是要去查過才清楚實際是不是可以。 但我觀察此 thread 原 po 說該 offset 是要代入 function 的, 因此非常有可能其 offset 是需動態的,根本也不適合 const 的型態, 不然寫 #define offset 4 不是更乾脆嗎? 所以要 malloc 或 new 的方法動態調整, 或前幾篇曾提過,如 C++ vector 之類的方式來作了。 -- 幸福,當我滿頭白髮時,依然能夠與妳手牽著手攸然散步。 -- ※ Origin: SayYA 資訊站 <bbs.sayya.org> ◆ Modify: 06/09/25 1:57:18 <218-162-48-2.dynamic.hinet.net>