void PRINT_LCS(int b[][], string x, int i, int j){
if(i==0 || j==0)
cout<<x[0];
if(b[i][j] == 1){
PRINT_LCS(b, x, i-1, j-1);
cout<<x[i];
}
else if(b[i][j] == 2)
PRINT_LCS(b, x, i-1, j-1);
else
PRINT_LCS(b, x, i, j-1);
}
这是我的程序,但我不知道为什么第一行有错误。错误消息如下:
error: declaration of 'b' as multidimensional array must have bounds for all dimensions except the first|
error: expected ')' before ',' token|
error: expected initializer before 'x'|
答案 0 :(得分:4)
在函数参数中声明数组时,必须传递2D数组的第二个(列)维度。在你的情况下:
void PRINT_LCS(int b[][COLUMN], string x, int i, int j) //replace column with the no of cols in your 2D array
答案 1 :(得分:0)
当你将一维数组声明为int b[]
时,编译器不知道该数组的大小,但是它使用b作为int的指针,并且能够访问其组件,是该组件的责任。程序员,以确保访问是在数组的范围内。所以,这段代码:
void f(int b[]) {
b[5] = 15; // access to 5th element and set value 15
}
相当于:
void f(int *b) {
*(b + 5) = 15;
}
如果使用二维数组,则数组的行会连续存储在内存中,因此编译器需要知道列大小才能访问数组中的任意元素。 (程序员仍然有责任确保访问不受限制)。现在,这段代码:
void f(int b[][COLUMN_SIZE]) {
b[5][3] = 15; // access to 5th row, 3rd column and set value 15
}
相当于:
void f(int *b) {
*(b + 5 * COLUMN_SIZE + 3) = 15;
}
但是如果你没有指定列大小,编译器如何知道它的大小? 这可用于多维数组。