A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天学到二维数组,有一个练习是定义一个二维数组a[m][n],其中m和n用scanf函数从键盘接收,练习时发现在c中变量必须定义在函数的开头,也就是说
  1. scanf("%d,%d",&m,&n);
复制代码
不能放在int a[m][n];之前,那请问此题何解?

7 个回复

倒序浏览
C语言 数组的长度必须是已知的常量或者常量表达式。在编译的过程中就需要知道数组的长度。变量是在运行的时候才会赋值。所以不可以接收用户输入的值。不知道这么说对不对?
回复 使用道具 举报
const int m=0;
const int n=0;
这样写试试
回复 使用道具 举报
仰望星空的猪 发表于 2015-11-18 19:08
C语言 数组的长度必须是已知的常量或者常量表达式。在编译的过程中就需要知道数组的长度。变量是在运行的时 ...

但是如果在定义这个数组之前就从键盘接收到了m和n的值,这个值不就是确定了的吗?
回复 使用道具 举报
cube川 发表于 2015-11-18 19:56
const int m=0;
const int n=0;
这样写试试

试了,也不可以T^T
回复 使用道具 举报
木冉 发表于 2015-11-19 11:37
但是如果在定义这个数组之前就从键盘接收到了m和n的值,这个值不就是确定了的吗? ...

代码-编译-链接-执行。  从键盘接收数据那是在  执行  的时候。数组定义的长度是在   编译   这个环节就需要明确给出的。
回复 使用道具 举报
木冉 中级黑马 2015-11-20 10:34:54
7#
仰望星空的猪 发表于 2015-11-19 13:51
代码-编译-链接-执行。  从键盘接收数据那是在  执行  的时候。数组定义的长度是在   编译   这个环节就 ...

soga,也就是说在c++编译器里是不可以这么操作的,xcode却可以T_T

点评

对 xcode可能对编译器做了优化吧?  发表于 2015-11-20 11:21
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马