2013-03-15 62 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