【问题标题】:How to create a null matrix and show it on the screen?如何创建一个空矩阵并将其显示在屏幕上?
【发布时间】:2019-04-11 19:10:10
【问题描述】:

我正在尝试使用方法 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]

--警告:函数返回局部变量的地址[-Wreturn-local-addr]|

【问题讨论】:

  • 肯定有一些问题 - 无法在 zeros 中返回本地数组,将 rowcolumn 重用为计数器而不是限制很奇怪。但我很难相信什么都没有打印出来。
  • 修复编译器警告并重试。
  • 这对您有帮助 1. 修复编译器警告 2. 想想您在做什么以及为什么。为什么将每个数字传递给每个函数以及为什么需要它。仔细考虑每一行,这应该有助于解决你正在做的错误和奇怪的事情
  • 我只是把我有的警告,我不知道如何解决它们。
  • 您的代码表明您只是在学习编程。在 SO 上问这个问题对你的学习会适得其反:这里的大多数人都知道答案,但 QA 网站无法教授答案。有人会用他们的知识来修复你的代码,但你的知识不会增加。最后,“想想你在做什么以及为什么”是最好的建议,但你不需要这样做。

标签: c matrix null


【解决方案1】:

在 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;
}

【讨论】:

    猜你喜欢
    • 2022-06-11
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2010-10-08
    相关资源
    最近更新 更多