Re: [問題] 全域變數

看板C_and_CPP作者 (燒)時間13年前 (2012/04/20 08:03), 編輯推噓3(308)
留言11則, 5人參與, 最新討論串3/3 (看更多)
※ 引述《scws (小涼)》之銘言: : 全域變數的問題 : 如下 : int x=1,y=1,z=z; 全域後只能是常數 : int v=x*y*z; 這一定不行  : double total[v]; GCC可以 VC不行 但強列建議不要這樣搞 : void main(){ : } : 上述的 xyz 我會做改變 : compiler後 : 關於 v 出現 "initializer element is not constant" : total[v] 出現 "variable-size type declared outside of any function" : 我將 v 給一個常數 才可以過 total[v]則不行 : 兩邊的v 要都給一個常數 才都過 : 我以為全域跟區域變數一樣 有宣告 可以間接給數值(如上) 全域後只能是常數  很多編譯器可以是無引數的函數,但強烈建譯不要這樣搞 int Volume(void) { return x*y*z; }/*Volume*/ int v = Volume(); : 請問是兩著差在哪裡? 還是我哪個觀念錯? : 因為我需要他們是外部變數 (我是寫成專案的方式) 所以把它們寫成全域函數 : 而我希望 v 是隨我想要 xyz 變 : 謝謝 能不用全域就不要用全域,不然到時代碼一長 會自己錯亂 #include <stdlib.h> /*一定要加,malloc/free在這裡*/ #define X_VALUE 1 #define Y_VALUE 1 #define Z_VALUE 1 int Volume(int x, int y, int z) { return x*y*z; }/*Volume*/ int main(void) { int x, y, z; int v; double *pTotal; /*背起來這語法*/ x = X_VALUE; y = Y_VALUE; z = Z_VALUE; v = Volume(x, y, z); pTotal = (double*)malloc(v*sizeof(double)); /*背起來*/ : : free(pTotal); pTotal = NULL; /*用完v加上這條,背起來*/ return 0; }/*main*/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 182.235.79.253

04/20 16:06, , 1F
狠一點可以用_alloca(VC) 不過這就是提外話了
04/20 16:06, 1F

04/20 16:23, , 2F
*sizeof(double) ?
04/20 16:23, 2F
※ 編輯: WeBurn 來自: 182.235.79.253 (04/20 16:41)

04/20 16:41, , 3F
已優正樓上
04/20 16:41, 3F

04/20 21:46, , 4F
好多要背的, 背不起來怎麼辦? *_* 科科~
04/20 21:46, 4F

04/20 21:47, , 5F
還是花點功夫理解這些標示要背起來的東西背後的意義比較
04/20 21:47, 5F

04/20 21:48, , 6F
好,以免有一天程式長大後搞死自己!
04/20 21:48, 6F

04/21 00:55, , 7F
請問第二個背起來的用意是?我無法把pTotal跟v聯想在一起
04/21 00:55, 7F

04/21 00:56, , 8F
想請教一下原PO,謝謝
04/21 00:56, 8F

04/21 16:38, , 9F
pTotal 是一條空間 用來裝double ,現在配這塊空間
04/21 16:38, 9F

04/22 01:10, , 10F
因為每格都要裝double,所以每格是sizeof(double)
04/22 01:10, 10F

04/22 01:10, , 11F
然後要乘以v格就是總共要多大,丟進去malloc給他
04/22 01:10, 11F
文章代碼(AID): #1FaHXdCz (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
3
10
13年前, 2012/04/20 07:34
完整討論串 (本文為第 3 之 3 篇):
問題
3
11
問題
3
10
13年前, 2012/04/20 07:34
問題
2
23
文章代碼(AID): #1FaHXdCz (C_and_CPP)