全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2567
推到 Plurk!
推到 Facebook!

請問如何產生"動態"的全域變數

尚未結案
l8939_c
一般會員


發表:9
回覆:15
積分:4
註冊:2005-03-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-10 02:34:34 IP:211.76.xxx.xxx 未訂閱
請問 C 可以動態產生全域變數嗎 ? 我希望在副程式A , 一次讀取n個整數, 放入 test[n] 陣列中 然後副程式B , 副程式C .... 可以隨時使用 test[n] 因此希望 test[n] 是全域變數陣列 , 才可以讓其他副程式任意使用 不知道正確寫法為何 ? Ps. test[n] 陣列大小必須可以由副程式A 動態改變 engineer
------
engineer
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-10 08:27:01 IP:59.104.xxx.xxx 未訂閱
unsigned char *test;
main()
{
test = NULL;
}
fa()
{
if (test != NULL)
test = realloc(size);
else
test = malloc(size);
}
fb()
{
//use test here
}
l8939_c
一般會員


發表:9
回覆:15
積分:4
註冊:2005-03-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-15 17:44:23 IP:61.58.xxx.xxx 未訂閱
您好,     
 
 unsigned char *test;     void __fastcall TForm1::BUTOnClick(TObject *Sender)
 {
   test = malloc(3);
 }  
 
出現 : Cannot convert 'Void*' to 'Unsigned char*' 不知問題出在哪裡 .... engineer
------
engineer
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-15 18:06:43 IP:210.68.xxx.xxx 未訂閱
查Help可得知
void *malloc(size_t size); 
所以要改成
test = (unsigned char *) malloc(3); 
順心
l8939_c
一般會員


發表:9
回覆:15
積分:4
註冊:2005-03-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-16 01:16:00 IP:61.58.xxx.xxx 未訂閱
您好 可以執行了 不過我還有個小問題 realloc(size) 和 malloc(size) 的差別是什麼 該如何使用比較洽當呢 engineer
------
engineer
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-17 19:46:53 IP:211.22.xxx.xxx 未訂閱
插個花!, > -----------------------------------------------
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-17 21:22:48 IP:59.104.xxx.xxx 未訂閱
唉。遇到這樣。我還能說什麼? 這算是很好心寫範例程式的狀況。 通常我只給方法的。。。。。。。。唉。 http://www.mcu51.com/list.asp?id=1588 想想別人怎麼學,我們有這麼用心嗎? 憂心啊~~~~~~
l8939_c
一般會員


發表:9
回覆:15
積分:4
註冊:2005-03-07

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-20 23:23:46 IP:61.58.xxx.xxx 未訂閱
不好意思    我原本是想要動態產生二維的全域變數, 但對 malloc() 這個函數不太了解 雖有查過Help, 但英文不好, 不是很了解它的說明, 所以才有此問 這幾天又試了幾次, 還是有點問題, 我的程式碼如下     
int **ST;
//-------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
  ST =(int **) malloc(40);         //  宣告一個 5*10 的二維陣列
  for (int i=0;i<=4;i  ){
    ST[i]=(int *) malloc(36);
  }      for (int i=0;i<=4;i  ){          //  給定初值
    for (int j=0;j<=9;j  ){
      ST[i][j]=i j;
    }
  }
}
//-------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
  for (int i=0;i<=4;i  ){              //  用 ListBox 顯示此二維陣列值
     for (int j=0;j<=9;j  ){
       List1->Items->Add(ST[i][j]);
     }
   }
}
 
程式執行沒有問題, 但 malloc(40) 與 malloc(36) 是我胡亂試出來的 不知道正確計算的方法為何 如果將 int 陣列改為 float 陣列時, 又該如何計算呢 ? engineer
------
engineer
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-21 12:09:39 IP:61.228.xxx.xxx 未訂閱
假設為5*10的陣列
ST =(int **) malloc(5*sizeof(int*));    ST[i]=(int *) malloc(10*sizeof(int));
如果為float,就把上面int改為float就OK了.
系統時間:2024-09-07 5:03:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!