C++中的数组运用

C++中的数组使用
我在gcc中实验过,下面的代码是可以通过的:
C/C++ code

#include <iostream>
#include <iomanip>
using namespace std;
void zigzag(int n){
    const int N=n;
    int a[N][N];
    int squa=N*N;
    int b[N*N][2];
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++){
            int s=i+j;
            if(s<N) {
                a[i][j]=s*(s+1)/2+((i+j)%2==0?j:i);
            }
            else{
                s=(N-1-i)+(N-1-j);
                a[i][j]=squa-s*(s+1)/2-(N-((i+j)%2==0?j:i));
            }
            b[a[i][j]][0]=i;
            b[a[i][j]][1]=j;
        }
    for(int i=0;i<N;i++){
        for(int j=0;j<N;j++)
            cout<<setw(2)<<a[i][j]<<" ";
        cout<<endl;
    }
    for(int i=0;i<N*N;i++) {
        for(int j=0;j<2;j++)
            cout<<setw(2)<<b[i][j]<<' ';
        cout<<endl;
    }
}
int main(){
    int n=4;
    zigzag(n);
}


这里面采用const来定义一个常量,但是常量的值来自一个变量。这样是不是有点C++中的动态申请数组的意思?
C++中对于这种情况是如何处理的?和固定的int a[20][20]数组的处理一样吗?、



------解决方案--------------------
这个是C99里面的,VS系列编译器没有提供这样的功能。和固定的有点区别。因为这个数组的大小是要到运行的时候才能确定的。但是,这个有点不安全。如果你把值赋错了就完蛋了
------解决方案--------------------
探讨

引用:

这个是C99里面的,VS系列编译器没有提供这样的功能。和固定的有点区别。因为这个数组的大小是要到运行的时候才能确定的。但是,这个有点不安全。如果你把值赋错了就完蛋了

恩,对,我在VS上试了一下,无法编译通过。