2012-06-16 44 views
1

真正的noob问题毫无疑问,但我无法摆脱这种行为。我初始化一个二维数组,然后调用一个函数来打印出它的某些值。程序和结果如下所示:二维数组 - 为什么我没有引用预期的元素?

int 
main(void) 
{ 
    int matrix[3][5] = 
    { 
     {14,7,6,55,2}, 
     {8,33,12,88,24}, 
     {19,20,21,90,7} 
    }; 

    printArray(3, 5, matrix); 

    printArray(2, 3, matrix); 

    return 0; 
} 

void 
printArray(int rows, int columns, int matrix[rows][columns]) 
{ 
    int i, j; 



    for (i = 0; i < rows; i++) 
    { 
     for (j = 0; j < columns; j++) 
      printf("%3i ", matrix[i][j]); 

     printf("\n"); 
    } 



    printf("\n");  
} 



14 7 6 55 2 
8 33 12 88 24 
19 20 21 90 7 

14 7 6 
55 2 8 

看来,第二时间printArray()被调用,它将继续在新的一行打印从第一行的值,而不是实际访问的下一行。我不明白这一点,因为索引值是不变的,不是吗? (即矩阵[1] [2]应该是(在这种情况下)12,而不是预先8.

由于

回答

4

以下:

void printArray(int rows, int columns, int matrix[rows][columns]) 

承诺编译器的第三个参数。具有尺寸rows X columns

与此同时,以下行打破这个诺言:

printArray(2, 3, matrix); 

因为matrix3 x 5而不是2 x 3

如果你只是想打印的行和列的一个子集,你可以这样做:

void 
printArray(int rows, int columns, int matrix[rows][columns], int max_row, int max_col) 
{ 
    int i, j; 

    for (i = 0; i < max_row; i++) 
    { 
     for (j = 0; j < max_col; j++) 
      printf("%3i ", matrix[i][j]); 
     printf("\n"); 
    }   
    printf("\n");  
} 

int main(void) 
{ 
    ... 
    printArray(3, 5, matrix, 3, 5); 
    printArray(3, 5, matrix, 2, 3); 
} 
+0

太好了,我得到它。非常感谢。 – spoovy

相关问题