如何在 C 中声明可变大小的数组?

2024-03-05

好吧,我正在做矩阵乘法,我需要做一个m x n数组和一个p x q array.
但是,我不知道该怎么做。

这是我的程序,当我手动输入值时,它会打印正确的输出:

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    /*
        Rows and columns for matrices.
    */
    int m , n; // rows and columns of the first matrix
    int p , q; // rows and columns of the second matrix

    /*
        1st matrix is a 2x3 matrix
    */
    m = 2;
    n = 3;

    /*
        2nd matrix is a 3x2 matrix
    */
    p = 3;
    q = 2;


    /*
        Create the matrices.
        Give them values.
    */
    int matrix1[m][n] = {
                            {2,3,4},
                            {5,6,7}
                        };
    int matrix2[p][q] = {
                            {1,7},
                            {3,9},
                            {5,11}
                        };

    /*
        Check if we can multiple the matrices.
        For matrix multiplication,
        the number of COLUMNS of FIRST matrix must be equal to
        the number of ROWS of SECOND matrix
    */
    if(n==p){
        /*
            Create a new matrix.
            The resulting matrix will have M rows and Q columns.
            That is, the matrix is a MxQ matrix.
        */
        int matrix3[2][2]; 

        /*
            We need three loops so we have 3 variables.
        */
        int i = 0; // iterates over matrix1 rows
        int j = 0; // iterates over matrix1 columns
        int k = 0; // iterates over matrix2 rows
        int l = 0; // iterates over matrix2 columns


        while(i < m){
            l = 0;
            while(l < q){
                int element = 0;
                while(j < n && k < p){
                    element += matrix1[i][j] * matrix2[k][l];
                    matrix3[i][l] = element;
                    j++;
                    k++;
                }
                printf("\t%d",element);
                l++;
                j = 0;
                k = 0;
            }
            printf("\n");
            i++;
        }

    }else{
        printf("Matrices can not be multiplied");
    }
}  

矩阵声明被标记为错误。我该如何解决?


我该如何解决?

首先,不使用 VLA。您不需要 VLA 来完成此特定任务。

至于实际问题是什么:变长数组无法初始化。您必须一一分配给它们的元素,或者使用一些批量“分配”技术,例如memcpy().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C 中声明可变大小的数组? 的相关文章

随机推荐

  • 链接静态库时未捕获异常

    我开始在程序中实现 try catch 但是当我测试它时 异常从未被捕获 程序只是崩溃了 即使是最简单的 try catch 用例也会失败 即 try throw 123 catch cerr lt lt This line doesn t
  • 如果 dotCover 没有报告足够高的结果,我如何才能使 TeamCity 构建失败?

    我希望 TeamCity 运行我的 mSpec 测试并报告测试所涵盖的代码 我还希望 TeamCity 报告构建失败如果某些命名空间中的代码覆盖率未达到阈值 e g MyProduct ImportantStuff必须是100 but My
  • 打印通用字符

    谁能解释为什么通用字符文字 例如 u00b1 被编码为 UTF 8 字符字符串 为什么下面会打印加号 减号 include
  • 可变长度模板参数列表?

    我记得看到过这样的事情 template
  • 具有旧式类的 Python 描述符

    我试着用谷歌搜索一些关于它的东西 为什么非数据描述符适用于旧式类 文件说他们不应该 请注意 描述符仅针对新样式对象或类 子类化的对象或类 调用object or type http docs python org 2 reference d
  • 如何使用Camera2获取前置摄像头的id?

    如何使用新的 Camera2 库获取前置摄像头的 ID 我在文档中找不到它 我找到了解决方案 我可以通过调用获取相机特征getCameraCharacteristics cameraId on CameraManager object St
  • Twitter Bootstrap 中的全宽拆分下拉按钮

    我的网站上有一个地方正在使用一堆button元素样式为btn block example http jsfiddle net TQSk6 1 来自 Twitter Bootstrap 文档 我现在想将其中一些切换为拆分按钮 example
  • STL 和发布/调试库混乱

    我正在使用一些第三方 我正在使用它的共享库版本 因为该库很大 60MB 并且被多个应用程序使用 有没有办法在应用程序启动时找出库的发布 调试版本分别用于我的应用程序的发布 调试版本 更长的描述 公开 C 接口的库 API 方法之一返回std
  • IIS 7.0 中的模拟

    我有一个在 IIS 6 0 下正常工作的网站 它使用 Windows 凭据对用户进行身份验证 然后在与访问数据库的服务通信时 它会传递凭据 在 IIS 7 0 中 相同的配置设置不会传递凭据 并且数据库会受到 NT AUTHORITY AN
  • 捕获某个按钮点击的WndProc消息

    我的表格上有一个取消按钮 我想确定里面WndProc方法表示这个Cancel单击按钮并为其编写一些代码 这是绝对必要的 因为否则我无法取消所有其他尚未执行的控件验证事件 请帮忙 NET 2 0 WinForms 您可以通过以下方式解析左键单
  • Angular 2 TypeScript 如何在数组中查找元素

    我有一个组件和一个服务 成分 export class WebUserProfileViewComponent persons Person personId number constructor params RouteParams pr
  • Dialogflow Agent 在 Google 模拟器中工作,但在控制台和 Web 链接中失败

    我正在使用 Dialogflow V2 API 通过 Google 模拟器上的 Actions 进行测试时一切正常 请查找附件图片 但是 当尝试使用 Dialogflow 中的控制台 右列 以及 Web 集成链接时 它不起作用 代理能够从用
  • 比较常量时,哪里可以使用 & 和 ==?有什么不同?

    我想知道两者之间有什么区别 file dwFileAttributes FILE ATTRIBUTE DIRECTORY and file dwFileAttributes FILE ATTRIBUTE DIRECTORY 当我使用第一个时
  • 清除python中的变量

    python中有没有办法清除变量的值 例如 如果我正在实现二叉树 class Node self left somenode1 self right somenode2 如果我想从树中删除某些节点 我需要设置self left清空 The
  • iOS - 跟踪我的安装来自哪些广告活动[重复]

    这个问题在这里已经有答案了 我在应用商店中有一个 iOS 应用程序 并且正在运行一些广告活动 Google Adwords FB 广告等 我如何知道我的安装来自哪里 我有一个等效的 Android 应用程序 Google play 允许我将
  • ruby 中的错误解密错误

    在执行时cipher final 它说bad decrypt错误 我试图找出问题所在 但是 我找不到 你能告诉我我的代码有什么问题吗 这是我的代码 require openssl require base64 require hex str
  • 如何修复“重复属性映射”异常?

    我正在使用我的 xml 文件来从我的数据库映射新表 但是当我启动项目时 我收到一个我无法理解和解决的重复属性映射错误 这是我的 hibernate cfg xml
  • 如何检查 tvOS 是否启用了深色外观

    如何检查用户是否在 Apple TV 上启用了深色外观 Using UI用户界面样式 https developer apple com reference uikit uiuserinterfacestyle 首先在 tvOS 10 中提
  • 突出显示搜索文本 - 角度 2

    信使根据用户给出的输入显示搜索结果 在显示结果时需要突出显示搜索到的单词 这些是所使用的 html 和组件 组件 html div div Id result id div div Summary result summary div di
  • 如何在 C 中声明可变大小的数组?

    好吧 我正在做矩阵乘法 我需要做一个m x n数组和一个p x q array 但是 我不知道该怎么做 这是我的程序 当我手动输入值时 它会打印正确的输出 include