小众知识

首页 > 正文

如何在程序运行时定义一个数组:

如何在程序运行时定义一个数组:

就是说程序运行时,输入一个n值,然后再定义一个数组,象这样:int x[n];
如果象上面这样,编译会出错,指出 n 需要一个常量!!! 这个值可能是10左右,我总不能这样定义吧:int x[100];这样能过关,但终归不是好办法!!!!  

 ntxs 发表于:2003-11-20 03:36:05
得分:0 

答案是不可以 

建议用vector   这个就是专门用来替代数组的啊 


 Clerk_9919 发表于:2003-11-20 07:57:33
得分:0 

int * x = new int[10];
..
..在这里可以把x作一般的数组 ,如x[1]= 5;
..
delete x; 

 zhouqingyuan 发表于:2003-11-20 08:43:03
得分:0 

不可以在运行时候定义的,
或者你可以用指针,
int n;
scanf("%d",&n);
int *a=new int(n);//相当于int a[n];

 smaxll 发表于:2003-11-20 09:26:13
得分:0 

UP 

 houhw1728 发表于:2003-11-20 10:51:37
得分:0 

up 

 smaxll 发表于:2003-11-20 11:18:31
得分:0 

有,是基于标准库有一个 std::vector 模板可以提供这种行为的认识。 

没有,是基于内建数组类型需要在编译期指定其长度的认识。

有,是基于即使对于内建数组类型也可以在运行期指定第一维索引边界的认识。例如,如果你只需要数组的第一维的维数具有灵活性,你可以申请一个新的数组的数组,而不是一个指向多个数组的指针数组:



 const unsigned ncols = 100;           // ncols = 数组的列数
 
 class Fred { /*...*/ };
 
 void manipulateArray(unsigned nrows)  // nrows = 数组的行数
 {
   Fred (*matrix)[ncols] = new Fred[nrows][ncols];
   // ...
   delete[] matrix;
 } 
如果你所需要的不是在运行期改变数组的第一维维数,则不能这么做。

但非万不得已,不要用数组。因为数组是会带来麻烦的。如果可以的话,使用某些类的对象。万不得已才用数组。 


 yufeng1979 发表于:2003-11-20 11:43:53
得分:0 

可以使用动态分配内存方法,
int *p_array=new int[n];
注意不要忘了在不用时,释放空间 

 gxxlc 发表于:2003-11-20 13:32:22
得分:0 

如果在MFC下可以用
CArray模板做。 

 yisan 发表于:2003-11-20 14:33:35
得分:0 

使用vector或者new。

// get a number n
int* pai = new int[n];
...
delete []pai;

不过建议你看看vector的资料,我想这会激起你对c++更大的兴趣 :) 

上一篇:template模板操作
下一篇:要学习visual studio.net有什么建议?

分享到: