编写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
相关产品推荐
相关产品推荐

