[問題] 請問關於雙重指標傳送二維矩陣的問題

看板C_and_CPP作者 (總是很多心事)時間13年前 (2011/07/20 20:48), 編輯推噓8(8022)
留言30則, 7人參與, 最新討論串1/2 (看更多)
開發平台(Platform): GCC, Linux 問題(Question): 請問若要傳送二維陣列 讓 C 可以正確識別 x[1][1] 而函數是使用 float ** 來傳遞 請問該如何傳入呢? 想請教程式碼問號處該怎麼設.... 預期的正確結果(Expected Output): 5 程式碼(Code):(請善用置底文網頁, 記得排版) #include <stdio.h> #include <stdlib.h> void func(float ** x) { x[1][1]++; printf("%f \n", x[1][1]); } int main(void) { float mat[2][2]; mat[0][0] = 1.0; mat[0][1] = 2.0; mat[1][0] = 3.0; mat[1][1] = 4.0; func(??); return EXIT_SUCCESS; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.11.212.193

07/20 20:49, , 1F
只有這樣的話沒招 因為兩種是不同結構的陣列
07/20 20:49, 1F

07/20 20:49, , 2F
可參照我的舊文 #184jAvE3
07/20 20:49, 2F

07/20 20:51, , 3F
看一下置底13戒的第12條 http://codepad.org/n6f6DjrA
07/20 20:51, 3F

07/20 20:54, , 4F
基本上 [][] 跟 ** 是兩回事
07/20 20:54, 4F

07/20 20:56, , 5F
其實我今天是看 numerical recipes 裡的函數就是這樣傳...
07/20 20:56, 5F

07/20 20:57, , 6F
我也是覺得很奇怪 找遍 google 都沒答案
07/20 20:57, 6F

07/20 21:02, , 7F
這是他的函數 http://ppt.cc/pgW~ 第一個傳入的就是了
07/20 21:02, 7F

07/20 21:03, , 8F
傳入 float ** a , 裡面也直接使用 a[][]
07/20 21:03, 8F

07/20 21:03, , 9F
好久沒看到這種舊式程式碼了XD
07/20 21:03, 9F

07/20 21:04, , 10F
func(map);
07/20 21:04, 10F

07/20 21:05, , 11F
func(mat) 沒辦法使用 已試過
07/20 21:05, 11F

07/20 21:06, , 12F
http://codepad.org/mDIns06j 其實問題是在呼叫端
07/20 21:06, 12F

07/20 21:06, , 13F
如果你的 mat 本來就是 float ** 的話就很自然
07/20 21:06, 13F

07/20 21:06, , 14F
如果你的 mat 是 float [][] 的話就不行
07/20 21:06, 14F

07/20 21:07, , 15F
你要不要把** 變成*
07/20 21:07, 15F

07/20 21:08, , 16F
還是*[]?
07/20 21:08, 16F

07/20 21:08, , 17F
void func(int v[][]) 然後用-ansi
07/20 21:08, 17F

07/20 21:09, , 18F
原來還有這種方法 感恩阿
07/20 21:09, 18F

07/20 21:10, , 19F
-ansi? 這種宣告和 float ** 有什麼不一樣 @_@
07/20 21:10, 19F

07/20 21:12, , 20F
-ansi 是compiler flag...
07/20 21:12, 20F

07/20 21:12, , 21F
我照david50407的推文,還是沒辦法編過
07/20 21:12, 21F

07/20 21:13, , 22F
要看編譯器 我用gcc 可以過g++ 不能
07/20 21:13, 22F

07/20 21:14, , 23F
「gcc -ansi test.c」我這樣不行 (gcc 4.1.2)
07/20 21:14, 23F

07/20 21:33, , 24F
你的 code 只能 void func(float (*x)[2])
07/20 21:33, 24F

07/20 21:33, , 25F
或是 void func(float x[][2])
07/20 21:33, 25F

07/20 21:34, , 26F
然後caller為func(map) 這很基本 看點書吧
07/20 21:34, 26F

07/20 22:24, , 27F
我想問這本數值分析書名,確實有點老,不過有些技巧想看.
07/20 22:24, 27F

07/20 22:25, , 28F
float *vector(); 其實那本書已經幫你寫好一點東西了,
07/20 22:25, 28F

07/20 22:26, , 29F
會用的話應可省下很多功.
07/20 22:26, 29F

07/20 23:30, , 30F
書名 numerical recipes
07/20 23:30, 30F
文章代碼(AID): #1E9iw7xl (C_and_CPP)
文章代碼(AID): #1E9iw7xl (C_and_CPP)