为什么这段代码成功编译,没有任何警告:
int m,n;
cin >> m >> n;
int arr[m][n];
[使用Code :: Blocks编译MinGW]
至少m或n中的一个必须在编译时保持不变? 我已经看过可变长度数组,但它们都是一维的。为什么这个二维也被接受?
此外,这也完全正常:
int arr[m][n][p];
答案 0 :(得分:1)
答案 1 :(得分:0)
只需在初始化时定义数组维度。假设用户输入m = 4
和n = 2
:
int arr[m][n];
... ...变为
int arr[4][2];
Voilà,编译器具有初始化数组所需的所有信息。
我认为这就是你的想法:
int arr[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // this code will fail
编译器只会自动检测第一维的数组大小。
int arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // this code will work
答案 2 :(得分:-1)
c ++语法的代码语法是正确的。但是如果你输入m或n小于零或m * n大于10000,那么它就会被提取。这就是你在try-catch中编写代码的原因,如下所示:
int m,n;
cin >> m >> n;
try {
int arr[m][n];
} catch (Exception e){
cout << "Error";
}