看板 C_and_CPP 關於我們 聯絡資訊
我寫了一個function: void add(int N, float R[100][100], float M1[100][100], float M2[100][100]) { int i,j; for(i=0;i<N;i++) { for(j=0;j<N;j++) R[i][j]=M1[i][j]+M2[i][j]; } } 是用來做矩陣加法的 然後我想要把他用成指標 我試著用這樣 void add1(int N,float *R,float *M1, float *M2) { int i,j; float *p; for(i=0;i<N;i++) { for(j=0;j<N;j++) *p=*(M1+i*N+j)+*(M2+i*N+j); } } 在main裡呼叫時也從 add(q,R,M1,M2); 改成 add1(q,&(R[100][100]),&(M1[100][100]),&(M2[100][100])); 可是在用switch選擇方陣大小及運算方法及輸入方法時都ok 一run到 add1 就會當掉 add是沒問題 請問一下我的add1該怎麼修改呢 因為我也是用b板上的概念第一次自己試著寫寫看 諸多不懂麻煩指教@@ 謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.102.131
james732:float *p; *p = .... 這個 p 沒有指向有效空間 11/25 22:16
james732:置底文的十三誡第三 11/25 22:17
honamida:好像是耶= = 那如果我要指向R呢?? 11/25 22:17
james732:那應該是 *(R + i * N + j) = .... 之類的 11/25 22:18
james732:p是多餘的 11/25 22:18
honamida:恩恩 這樣就不會當掉了 不過加出來結果都是0= = 11/25 22:20
james732:用 debugger 找找看問題吧 11/25 22:21
honamida:謝謝你囉! 11/25 22:22
akasan:&(R[100][100]) ? 11/25 22:27
honamida:恩 對 這樣有哪裡不對嗎@@" 11/25 22:50
akasan:你要取第一百行一百列的那個元素的位址? 11/25 22:53
shec1213:你應該是要取 R 這個陣列的起始位址 11/25 22:56
honamida:我改成&(R[0][0])了 不過只有矩陣第一列會有正確答案@@ 11/25 22:58
shec1213:add1為什麼又宣告了一個 *p? 應該直接把結果寫進R裡 11/26 00:15
shec1213:而且那個p沒有配置記憶體空間 11/26 00:15