问题描述
- C++中,定义的数组怎么由输入来确定维度
- eg: int a[m][n]; 请问这个mn的值怎么通过用户输入来获取;
解决方案
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;
}
解决方案二:
数组一般都是编译时分配内存,必须知道大小,否则编译器报错,如果程序需要运行时分配存储空间的话,用动态内存分配方法
解决方案三:
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]mn;
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运算符开辟空间,动态数组。
解决方案九:
静态数组的大小必须编译时确定,即固定大小,动态数据需要malloc或者new
解决方案十:
大家的回答有一定的问题,事实上自C99开始支持变长数组的(C++的标准记忆中也支持了)。示例如下:
int n;
scanf (""%d"" &n);
int array[n];
但是目前还没有能完美支持某一标准的编译器,是否能编译通过主要看你编译器。