如何将动态2d char数组传递给C中的函数?

时间:2014-04-17 11:56:55

标签: c arrays function

我知道当我将2d数组传递给c中的函数时我会写

int test(myarray[][5]){
//something
}
int main(void){
//something
test(myarray);
return 0;
}

这是我有5个柱子的时候,但是如果在程序开头我扫描例如行数和列数,我怎么办呢?所以它就像

scanf("%d %d", &rows, &collumns);
char myarray[rows][collumns];
test(myarray);

我的测试功能的声明应该是什么,我知道我不能像在第一段代码中那样放5,而且我不能把最大值设置为1000,如果我把

int test(myarray[][collumns])

它说我的函数中没有定义collumns ...

2 个答案:

答案 0 :(得分:4)

传递另一个设置宽度的变量。这是一个c99功能。

void test( size_t width , char myarray[][width] )
{
}

您可以这样称呼它:test( collumns , array );

myarray的行为与main中的数组完全相同。 (除了myarray实际上是一个指针,因此sizeof运算符会给你一个指针的大小,而不是数组)

除非以某种方式知道该信息,否则您还应传递数组的高度(示例中的行)。

答案 1 :(得分:0)

您可以使用动态内存分配

int main() {
    int i;
    char **myarray;
    scanf("%d %d", &rows, &collumns);
    myarray = (char**)malloc(rows);   //Memory allocation for rows
    for(i=0;i<rows;i++) {
    myarray[i] = (char*)malloc(columns);    //Memory allocation for colums
    }
    test(myarray);
}

int test(char** arr) {
  //Write your code as it is
}