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

C语言矩阵输入异常及变长数组函数参数未声明报错求助

C语言矩阵输入问题解决方案

问题1:第二个矩阵要求输入元素数多于预期的原因

你定义的matrixInput和matrixDisplay函数中,矩阵形参写为int matrix[][10],这代表强制约定矩阵的第二维长度固定为10。但你在main函数中创建的是变长数组(VLA)matrix1[row][column],当你输入列数为3时,实际每一行只有3个元素,和函数约定的10个元素不匹配。
函数寻址矩阵元素时,会按照首地址 + i * 10 + j计算位置,和你实际矩阵的内存布局完全错位,就会出现第一个矩阵输入正常,第二个矩阵输入数量异常、甚至后续输出错乱的问题。

问题2:修改参数后编译报错的原因

C语言中,函数参数的读取顺序是从左到右。你把int matrix[row][column]作为第一个参数时,编译器解析到这里还没有读到row和column的定义,自然会报变量未声明的错误。

修复方案

采用C99及以上标准支持的变长数组参数写法,调整参数顺序,把长度参数放在数组参数之前即可:

#include <stdio.h>

// 长度参数row、column放在数组参数之前
void matrixInput(int row, int column, int matrix[row][column], int matrixNo) {
  printf("Matrix %d input:\n", matrixNo);
  for (int i = 0; i < row; i++) {
    for (int j = 0; j < column; j++) {
      printf("Matrix %d [%d, %d]: ", matrixNo, i + 1, j + 1);
      scanf("%d", &matrix[i][j]);
    }
  }
  printf("\n");
}

void matrixDisplay(int row, int column, int matrix[row][column], int matrixNo) {
  printf("Matrix %d output:\n", matrixNo);
  for (int i = 0; i < row; i++) {
    for (int j = 0; j < column; j++) {
      printf("%d ", matrix[i][j]);
    }
    printf("\n");
  }
  printf("\n");
}

int main() {
  int row, column;
  printf("Row: ");
  scanf("%d", &row);
  printf("Column: ");
  scanf("%d", &column);

  int matrix1[row][column], matrix2[row][column];
  // 调用函数时参数顺序对应调整
  matrixInput(row, column, matrix1, 1);
  matrixInput(row, column, matrix2, 2);
  
  matrixDisplay(row, column, matrix1, 1);
  matrixDisplay(row, column, matrix2, 2);

  return 0;
}

如果你的编译器默认不支持C99标准,编译时添加-std=c99参数即可(GCC/Clang适用)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:09:04