首页 > 解决方案 > 将非常量矩阵发送到在 C 中使用 const 矩阵警告的函数

问题描述

我试图用 C 语言编写两个函数。第一个,一个函数,它获取两个矩阵(及其大小)并返回它们的多个矩阵。第二个,一个获取矩阵和她的大小并打印它的函数。这两个函数都不会改变输入矩阵,所以我想将它们作为函数中的 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 时收到的警告

标签: cmatrixfunction-pointerscompiler-warnings

解决方案


推荐阅读