Re: [問題] passing arg 1 of `load' from incompa …

看板C_and_CPP (C/C++)作者 (snowlike)時間16年前 (2009/10/09 16:48), 編輯推噓4(400)
留言4則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《james732 (好人超)》之銘言: 僅傳遞起始位址的作法應該這麼作 void set(int *ptr, int st, int ed, int th, int etc) { int i, j, k, l; for(i=0; i<st; ++i) { for(j=0; j<ed; ++j) { for(k=0; k<th; ++k) { for(l=0; l<etc; ++l) { printf("%d\t", ptr[i*ed*th*etc+j*th*etc+k*etc+l]); } printf("\n"); } } } } set((int*)ary, ...); 額外提供的;這不是轉不轉型的問題而已。考慮一個二維陣列 動態的方式:int **ary=malloc...懶得寫了 你可以這麼使用它*(*(ary+i)+j)或是ary[i][j] 靜態的方式:int ary[2][3]={{1,2,3},{4,5,6}}; 你也可以這麼使用它*(*(ary+i)+j)或是ary[i][j] 但是如果將它轉型成動態指標,就好像強制轉型傳遞給函式那樣 *(*( (int**) ary+i)+j)執行的時候是會產生錯誤的 動態的陣列取址的時候是像這樣的 *(ary+i)所存的值是下一個維度的位址,對其作+j後再取值才是實際上所儲存的資料 嘗試著對"靜態"陣列印出位址看看 print("%p", &ary[0]); //&*ary 第一個位置儲存第二維位址的第一維位址 print("%p", &ary[0][0]); //&**ary 第一個位置儲存實際資料的第二維位址 會得到一樣的位址(動態分配的話會是不一樣的) 如果將這樣型態的東西強制當做動態指標來使用的話 當*(ary+i)的位址是指向自己本身的時候ary+i,是不會去找到*(*(ary+i)+j) 其實靜態陣列不論幾維都只有一個維度而已orz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.184.50

10/09 17:24, , 1F
用五個迴圈別鬧了好嗎...要是你跟我合作我一定重寫你的code
10/09 17:24, 1F

10/09 17:37, , 2F
四個吧?? 不過那是原發問者他的code就四層的啦XD
10/09 17:37, 2F

10/09 18:06, , 3F
我想請問一下 這樣四層迴圈我也覺得很醜 但該怎麼改寫?
10/09 18:06, 3F

10/09 18:24, , 4F
下面就是答案啦, 直接用數學計算出正確的index啊XD
10/09 18:24, 4F
文章代碼(AID): #1AplZFj3 (C_and_CPP)
文章代碼(AID): #1AplZFj3 (C_and_CPP)