0

我试图将数组数组传递给一个函数,但我没有得到正确的结果。为此,我查看了 [this SO post][1]。我没有收到任何警告,我正在使用 TDM GCC 64 编译器。这段代码可能有什么问题?

#include <stdio.h>
#include<inttypes.h>

void printArrayOfArrays(uint8_t numRows,uint8_t numColumns,int arraOfArray[][numColumns]);


int main(void)
{
    int numRows, numColumns, rowCount, colCount, first[5][5];

    printf("Enter the number of rows and columns of matrix\n");
    scanf("%d%d", &numRows, &numColumns);

    printf("Enter the elements of first matrix\n");

    for (rowCount = 0; rowCount < numRows; rowCount++)
    {
        for (colCount = 0; colCount < numColumns; colCount++)
        {
            scanf("%d", &first[rowCount][colCount]);
        }
    }

    for (rowCount = 0; rowCount < numRows; rowCount++)
    {
        for (colCount = 0 ; colCount < numColumns; colCount++)
        {
            printf("%d\t",first[rowCount][colCount]);
        }
        printf("\n\n");
    }

    printf("\n");

    printArrayOfArrays(numRows,numColumns,first);

    return(0);
}

void printArrayOfArrays(uint8_t numRows,uint8_t numColumns,int arrayOfArray[numRows][numColumns])
{
    for (uint8_t rowCount = 0; rowCount < numRows; rowCount++)
    {
        for (uint8_t colCount = 0 ; colCount < numColumns; colCount++)
        {
            printf("%d\t", *(*(arrayOfArray+rowCount)+colCount));
        }
        printf("\n");
    }
}

我得到的结果是

Enter the number of rows and columns of matrix
2
2
Enter the elements of first matrix
4
3
1
6
4       3

1       6

4       3
0       0
4

2 回答 2

3

first您的inmain和 of arrayOfArraysin的数组定义printArrayOfArrays不一致:first是一个 5×5 数组,即使您不使用或初始化所有元素;arrayOfArrays是一个可变长度数组,在您的示例中为 2×2。

因此,您也应该创建first一个可变长度数组:

printf("Enter the number of rows and columns of matrix\n");
scanf("%d%d", &numRows, &numColumns);

int first[numRows][numColumns];

(确保您仅在之后定义它numRowsnumColumns具有有意义的值。)

或者您可以将函数的参数设为 5×5 的固定大小数组:

void printArrayOfArrays(uint8_t numRows, uint8_t numColumns,
    int arrayOfArray[5][5]);

(在这种情况下,您必须确保numRows并且numColumns不超过 5。)

于 2019-06-21T08:33:24.370 回答
0

您是否尝试使用其他语法访问这些值,例如:

 printf("%d\t", arrayOfArray[numRow][numColumn]));

这对我来说是显而易见的方式,但也许我不明白这个问题

于 2019-06-21T08:32:28.113 回答