Передача массива массивов в функцию - PullRequest
0 голосов
/ 21 июня 2019

Я пытался передать массив массивов в функцию, но я не получаю правильных результатов. Я посмотрел на [этот пост] [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

Ответы [ 2 ]

3 голосов
/ 21 июня 2019

Определения вашего массива first в main и arrayOfArrays в 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];

(Убедитесь, чтоВы определяете его только после того, как numRows и numColumns имеют значимые значения.)

Или вы можете сделать параметр для функции массивом фиксированного размера 5 × 5:

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

(В этом случае вы должны убедиться, что numRows и numColumns не превышают 5.)

0 голосов
/ 21 июня 2019

Вы пытались получить доступ к этим значениям с помощью другого синтаксиса, такого как:

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

Это очевидный способ для меня, но, возможно, я не понял вопроса

...