отправить неконстантную матрицу в функцию, которая использует предупреждения константной матрицы в C - PullRequest
0 голосов
/ 11 декабря 2018

Я попытался написать в Си две функции.Первая - функция, которая получает две матрицы (и их размер) и возвращает их кратную матрицу.Второе - это функция, которая получает матрицу и ее размер и печатает ее.Обе функции не изменяют входные матрицы, поэтому я хочу получить их как const в функциях (но в основной теме, а не в const матрицах).Вывод в порядке, но компилятор выдает мне предупреждения (как показано ниже), все те, когда я удаляю объявление const в функции, он не выдает мне никаких предупреждений.кто-то знает, почему он бросает мне эти предупреждения?и как я могу это исправить?(мне нужно это исправить?)
спасибо

#include <stdio.h>
#include <stdlib.h>

 int** multiple_matrix(int row1, int column1, int row2, int column2 ,const int mat1[][column1], const int mat2[][column2])
{      
    if((mat1 == NULL) || (mat2 == NULL))
    {
        printf("matrix equal to NULL, can't multiple!!!\n");
        return NULL;
    }

    if (row2 != column1)
    {
        printf("number of columns in the first matrix is not equal to number of rows in second matrix, can't multiple!!! \n");
        return NULL;
    }   
    int i,k,j,sum;
    int** res_mat = malloc (sizeof(int*) * row1);
    for (i = 0; i<row1; ++i)
    {
        res_mat[i] = malloc (sizeof(int) * column2);
        for (j = 0; j < column2; ++j)
        {
            sum = 0;   
            for (k = 0; k < column1; ++k)
            {
                sum += mat1[i][k] * mat2[k][j];
            }
            res_mat[i][j] = sum;    
        }
    }

    return  res_mat; 
}

void print_matrix( int** mat,size_t row, size_t column)
{
    if(mat != NULL)
    {
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                printf("%d  ",mat[i][j]);
            }

            printf("\n");
        }
    }
    else
    {
        printf("matrix is Null\n");
    }
}
int main()
{

    int matrix1[][3] ={{1,2,9},{3,4,9},{5,6,9}};
    int matrix2[][3] = {{7,8,9},{10,11,12},{1,1,1}};
    int matrix3[][1] ={{20},{30}};
    int ** matrix4 =NULL;


    size_t row1 = sizeof(matrix1)/sizeof(matrix1[0]);
    size_t column1 = sizeof(matrix1[0])/sizeof(matrix1[0][0]);
    size_t row2 = sizeof(matrix2)/sizeof(matrix2[0]);
    size_t column2 = sizeof(matrix2[0])/sizeof(matrix2[0][0]);
    size_t row3 = sizeof(matrix3)/sizeof(matrix3[0]);
    size_t column3 = sizeof(matrix3[0])/sizeof(matrix3[0][0]);


    printf("matrix1 is: %zu X %zu\n" ,row1,column1);
    printf("matrix2 is: %zu X %zu\n" ,row2,column2);
    printf("matrix3 is: %zu X %zu \n\n" ,row3,column3);


    int** res1_matrix =  multiple_matrix(row1,column1,row2,column2, matrix1, matrix2);
    printf("Matrix1 X Matrix2:\n");
    print_matrix(res1_matrix, row1, column2);
    printf("\n\n");

    int** res2_matrix =  multiple_matrix(row1,column1,row3,column3, matrix1, matrix3);
    printf("Matrix1 X Matrix3:\n");
    print_matrix(res2_matrix, row1, column3);
    printf("\n\n");


    return 0;
}

предупреждения, которые я получаю, когда использую const в функциях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...