C++中,定义的数组怎么由输入来确定维度

eg: int a[m][n]; 请问这个m,n的值怎么通过用户输入来获取;

scanf("%d,%d",&m,&n);

数组的维数,必须在定义时就确定,不能后续依靠变量的。
在 C 中,数组的维数采用变量,编译时会直接报错的。

可以考虑使用指针代替数组:按指针定义,按数组访问。

不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。例如:

#define FD 5 // ...
int a[3+2],b[7+FD];是合法的。

但是下述说明方式是错误的。
int n=5; int a[n];

可以定义一个一维的足够大的数据当作二维来用。
int c[5*8],m,n;
m = 5;n=8;
for (int i=0;i<m;i++)
{
for (int k=0;k<n;k++)
{
c[i*n+k]=0;
}
}

用new的方式,比如

int p = new int*[m];

for(int i = 0; i != m; ++i)
{
p[i] = new int[n];
}

for(int i = 0; i != m; ++i)
{
delete[] p[i];
p[i] = NULL;
}
delete[] p;
p = NULL;

数组一般都是编译时分配内存,必须知道大小,否则编译器报错,如果程序需要运行时分配存储空间的话,用动态内存分配方法

scanf("%d,%d",&m,&n);
int** a = new int*[m];
for(int i=0; i<m; ++i)
{
a[i] = new int[n];
}

用new运算符开辟空间,动态数组。

int main()
{
int n;
int m;
int **p = new int*[m];
for(int i = 0; i < m; i++)
{
p[i] = new int[n];
}
return 0;
}

静态数组的大小必须编译时确定,即固定大小,动态数据需要malloc或者new

大家的回答有一定的问题,事实上自C99开始支持变长数组的(C++的标准记忆中也支持了)。示例如下:
int n;
scanf ("%d", &n);
int array[n];
但是目前还没有能完美支持某一标准的编译器,是否能编译通过主要看你编译器。

静态数组必须在编译器编译之前就知道数组的大小和维度的。如果你想通过用户的输入来获取,则要用动态数组。

数组必须在定义是给定维数,数组的这个缺陷,可由容器弥补。