C 二维阵列-为什么我没有引用预期的元素?

C 二维阵列-为什么我没有引用预期的元素?,c,arrays,C,Arrays,毫无疑问,这是一个真正的问题,但我无法理解这种行为。我初始化一个二维数组,然后调用一个函数从中打印出某些值。程序和结果如下所示: 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

毫无疑问,这是一个真正的问题,但我无法理解这种行为。我初始化一个二维数组,然后调用一个函数从中打印出某些值。程序和结果如下所示:

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 
int
主(空)
{
整数矩阵[3][5]=
{
{14,7,6,55,2},
{8,33,12,88,24},
{19,20,21,90,7}
};
打印阵列(3,5,矩阵);
打印阵列(2,3,矩阵);
返回0;
}
无效的
printArray(int行、int列、int矩阵[行][列])
{
int i,j;
对于(i=0;i
似乎第二次调用printArray()时,它将继续在新行上打印第一行的值,而不是实际访问下一行。我不明白这一点,因为索引值肯定是恒定的,不是吗?(即矩阵[1][2]应该是(在这种情况下)12,而不是8

提前感谢。

以下内容:

void printArray(int rows, int columns, int matrix[rows][columns])
向编译器保证第三个参数具有维度
x

同时,以下一行违背了这一承诺:

printArray(2, 3, matrix);
因为
matrix
3
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);
}
void
printArray(int行、int列、int矩阵[行][列]、int max_行、int max_列)
{
int i,j;
对于(i=0;i
以下内容:

void printArray(int rows, int columns, int matrix[rows][columns])
向编译器保证第三个参数具有维度
x

同时,以下一行违背了这一承诺:

printArray(2, 3, matrix);
因为
matrix
3
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);
}
void
printArray(int行、int列、int矩阵[行][列]、int max_行、int max_列)
{
int i,j;
对于(i=0;i

太好了,我明白了。非常感谢。太好了,我明白了。非常感谢。