看板 b97902HW 關於我們 聯絡資訊
我以前的英文老師說過:「語言最要的地方就是能完整的傳達意思,對方聽得懂就好」 傳遞陣列(以其為引數),函式要知道一些事情才能處理: 1. 引數類型 2. 陣列的offset位移 程式在對二維變數存取時 int a[2][3]; a[1][2] = *(*(a+3*1)+2) a[0][1] = *(*(a+3*0)+1) 如同sa之前的實驗 int b[2]; b[1] = 1[b] = *(1+b) 應該只是單純的代換 所以處理二維變數的時候需要知道至少最後一維的值 處理 n維 n-1維 所以宣告函數 void func(int a[][]); 傳入時函數把a當作pointer處理,自然不知a陣列的大小(函式說:蝦米?沙西米?) 實際上,sizeof(a)在函式裡==sizeof(pointer) (sizeof 的值其實在compile時就決定了!所以他不知你執行時會傳多大的陣列) 所以要宣告void func(int a[][3]) 才能作陣列存取 *那麼,我宣告void func(int b[2]), 就可以sizeof了嗎? A: X. 那只是寫好玩的。陣列和pointer不同,陣列是const pointer,所以大小有保證。 pointer可以接不同的陣列,就像是函數引數可以接不同的變數,大小沒保證 以我的經驗,在openCV裡傳2維變數,其實要傳 void func(int width, int height, int depth, char *array); depth滿像變數型態 即話為一維變數,存取時用 *(*(array+depth*width*i)+height*j) 另在我寫embedded時的經驗,有人用 struct array { int a[3][3]; }; 直接傳struct 另學長joseph給的解法: 用c++ vector 另學長的學長給的解法: 比賽時就用global就好了嘛! 只不過真的寫程式時最好不要global滿天飛 以上 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.124.83.64
anfranion:第一次看你發教學文XD 11/15 17:54
dennis2030:推 原PO是隱強者XD 11/16 20:39
anfranion:原PO可是真‧隱強者XD 11/17 19:48