我知道当我将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 ...
答案 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
}