2013-03-15 69 views
0

我正在研究一個具有多個輸入參數(其中一些需要在代碼中計算)的項目,所以我把它們放在一個結構中。如何將指針傳遞給大小由C中的指針定義的二維數組?

typedef struct{ 
    int N_cell; 
    int N_node; 
}INPUT; 

在主函數,我聲明

INPUT in; 

後面還有用於計算in.N_cell和in.N_node若干行。現在,我定義

double *pos_node[in.N_node]; 
for (i = 0; i < in.N_node; i++) 
    pos_node[i] = (double *) calloc(3, sizeof(double)); 

然後,我需要這個數組的指針傳遞給我把它定義爲

void func(double *pos_node[????]){....} 

我的問題是一個功能,我應該怎麼寫在「???? 「地點?我應該使用in.Node並在參數列表中添加「INPUT in」嗎?

非常感謝!

+0

你就會有一個很難像編譯你有什麼那裏,你還沒有定義pos_node的有限大小事情(使用變量不去工作) – KevinDTimm 2013-03-15 17:27:47

+0

你對如何處理這類問題有一些建議嗎?我的意思是很多函數需要使用這些輸入參數,而某些數組的大小由它們決定。你認爲更好地使用「extern」變量嗎? – 2013-03-15 17:30:46

回答

0

嘗試分配pos_node在堆上:

double **pos_node = calloc(in.N_node, sizeof(double*)); 
for (i = 0; i < in.N_node; i++) 
    pos_node[i] = (double *) calloc(3, sizeof(double)); 

void func(double **pos_node){....} 
+0

它似乎工作。非常感謝! – 2013-03-15 17:41:03

0

你需要爲pos_node分配內存,以及:

double **pos_node = calloc (in.N_node, sizeof (double *)); 

(可變長度數組是C99提供,但大多數人不喜歡使用C99還)

然後很容易看到如何傳遞數組。 C中的數組只是一個內存塊,所以double *array[]可以正確寫爲double **array:保存地址的內存塊的地址加倍。

+0

你的意思是分配內存pos_node時,我應該首先加倍** pos_node = calloc(in.N_node,sizeof(double *));然後爲 (i = 0; i 2013-03-15 17:34:11