[英]How to create a null matrix and show it on the screen?
我正在尝试使用 zeros () 方法创建一个空矩阵; 然后将其显示在屏幕上。 什么都没有显示。
double * zeros(int m,int n){
double matrix[3][3] ={0};
return matrix;
}
void printMatrice(int row,int column, double matrix [3][3]) {
for (row=0; row<3; row++)
{
for(column=0; column<4; column++)
{printf("%f ", matrix[row][column]);}
printf("\n");
}
}
MAIN:
int main () {
printMatrice(3,3,zeros(3,3));
return 0;
}
在屏幕上显示:
进程返回-1073741819 (0xC0000005)
这些是警告
方法printMatrice():
--警告:从不兼容的指针类型 [-Wincompatible-pointer-types] 传递“printMatrice”的参数 3|
方法 zeros():
-- 警告:从具有不兼容返回类型“double *”的函数返回“double (*)[3]” [-Wincompatible-pointer-types]
--warning: 函数返回局部变量地址 [-Wreturn-local-addr]|
在 C++ 中使用多维数组是一件很痛苦的事情。 最简单的方法之一是使用一个简单的数组并手动将坐标转换为线性索引。
这样,您不必将矩阵维度硬连接到函数中,不必分配/释放内存,可以重用和重新解释数据等。当然,最好将其封装在一个类中,但是这只是一个例子。
void reset(double matrix[], int rows, int cols, double value) {
for (int i = 0; i < rows * cols; i++)
matrix[i] = value;
}
void print(double matrix[], int rows, int cols) {
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++)
printf("%f ", matrix[r * cols + c]);
printf("\n");
}
}
int main() {
double m[3 * 3];
reset(m, 3, 3, 0.0);
print(m, 3, 3);
printf("\n");
double n[2*5];
reset(n, 2, 5, 1.0);
print(n, 2, 5);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.