c - 将非常量矩阵发送到在 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;
}
解决方案
推荐阅读
- php - 使用 curl 下载视频的百分比
- python - 在 PyCharm 和 Python 3.6 中混淆 Mypy 类型检查
- r - 如何将随机森林模型从 R 导入 Android Studio?
- excel - Excel选择第一个值属于一个名称
- swift - swift中奇怪的静态字符串常量行为
- unit-testing - 除了 _default 之外,对 chef_environment 的嘲笑将 404 分开
- android - 如何从 xml 文件中获取应用程序版本代码?
- ssis - SSIS并行执行不运行序列容器
- python - 当我在 python 中调用 OpenGl 时出现错误
- openstack - 从 openstack 环境收集指标并在 grafana 中显示