※ 引述《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>