2 the lastest The_lastest 于 2014.12.03 16:51 提问

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

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

12个回答

coder_yi_liu
coder_yi_liu   2014.12.06 23:32

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;
}

wmqing
wmqing   2014.12.03 20:01

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

qq_23041297
qq_23041297   2014.12.03 17:17

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

91program
91program   Ds   Rxr 2014.12.03 17:38

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

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

mao0514
mao0514   Rxr 2014.12.03 17:47

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

#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;
}
}

VisualEleven
VisualEleven   Ds   Rxr 2014.12.03 18:47

用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;

piaobotudou
piaobotudou   2014.12.03 21:22

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

wqwe159
wqwe159   2014.12.04 16:27

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

zhouxuguang236
zhouxuguang236   2014.12.07 18:17

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

xuddk727
xuddk727   Rxr 2014.12.09 09:33

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

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!