You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写C语言矩阵维度获取函数遇语法问题,求技术协助

C语言矩阵维度获取与代码修正

代码中的关键问题

  • 参数类型不匹配:matrixdim函数定义中double mat[][4]指定第二维为4,但你的矩阵A是3列的,类型不兼容,会触发编译错误。
  • 传参方式错误:调用matrixdim时直接传入k和r属于传值调用,函数无法修改主函数内这两个变量的实际值,必须传入它们的地址(&k、&r)。
  • sizeof函数内失效:二维数组作为参数传递时会退化为指向数组的指针,此时sizeof(mat)得到的是指针的内存大小,而非原数组的整体大小,因此无法在函数内通过这种方式获取矩阵维度。

修正后的代码示例

如果你的目标是实现矩阵乘法,建议在数组定义的作用域内计算维度,再传递给处理函数:

#include <stdio.h>

double A[3][3] = {
    {1.23, 0, 0},
    {0, 1, 0},
    {0, 0, 1}
};

int B[3][3] = {
    {1, 0, 0},
    {0, 1, 0},
    {0, 0, 1}
};

// 矩阵乘法实现,需传入已知的维度信息
void matrix_multiply(int rows_a, int cols_a, int cols_b, double a[][cols_a], int b[][cols_b], double result[][cols_b]) {
    for (int i = 0; i < rows_a; i++) {
        for (int j = 0; j < cols_b; j++) {
            result[i][j] = 0;
            for (int k = 0; k < cols_a; k++) {
                result[i][j] += a[i][k] * b[k][j];
            }
        }
    }
}

// 用宏简化维度计算
#define GET_ROWS(arr) (sizeof(arr) / sizeof(arr[0]))
#define GET_COLS(arr) (sizeof(arr[0]) / sizeof(arr[0][0]))

int main(void) {
    // 在数组所在作用域内计算维度
    int rows_a = GET_ROWS(A);
    int cols_a = GET_COLS(A);
    int rows_b = GET_ROWS(B);
    int cols_b = GET_COLS(B);

    // 检查矩阵乘法的合法性:A的列数必须等于B的行数
    if (cols_a != rows_b) {
        printf("矩阵无法相乘:A的列数不等于B的行数\n");
        return 1;
    }

    double result[3][3] = {0};
    matrix_multiply(rows_a, cols_a, cols_b, A, B, result);

    // 打印结果矩阵
    printf("相乘结果矩阵:\n");
    for (int i = 0; i < rows_a; i++) {
        for (int j = 0; j < cols_b; j++) {
            printf("%.2f ", result[i][j]);
        }
        printf("\n");
    }

    return 0;
}

内容的提问来源于stack exchange,提问作者kartiks77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:07:21