c++中怎样定义动态数组

 我来答
水闰爱树木
高粉答主

2018-04-17 · 醉心答题,欢迎关注
知道小有建树答主
回答量:313
采纳率:100%
帮助的人:9.7万
展开全部

1、new 动态定义数组

2、因为new 就是用来动态开辟空间的,所以当然可以用来开辟一个数组空间。这样,下面的语句:

int size=50;
    int *p=new int[size]; //是正确的

3、但是二维动态数组能不能也这样定义呢

 int size=50,Column=50;
  int (*p)[Column]=new int [size][Column]

(1)首先 new int[size][Column] 就是动态生成时确定的,所以它没有错,那么就是 int(*p)[Column],这句有问题了,这句为什么不对呢, 那是因为,这是一个定义语句,而定义语句先经过编译器进行编译,当编译器运行到此处时,发现Column 不是常数,因此不能通过编译。

(2)而之所以编译器认为Column 不是常数,是因为编译阶段,编译器起的作用是查语法错误,和预分配空间,它并不执行程序,因此,没有执行那个赋值语句(只是对这个语句检查错误,和分配空间),因此编译阶段,它将认为column 是个变量。所以上面的二维数组定义是错误的, 它不能通过编译。

改成这样:

int size=50
  int (*p)[50]=new int [size][50]

便正确了。

帐号已注销
推荐于2017-09-01 · TA获得超过380个赞
知道小有建树答主
回答量:618
采纳率:50%
帮助的人:228万
展开全部
intmain(){
intlen;cin>>len;
//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间
int*p=newint[len];
...........delete[]p;
return0;
}
注意int*p=newint[len];
这一句,你不能这样做:intp[len];
C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行:intp[]=newint[len];编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int*p=newint[len]
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
greazen
2013-04-19
知道答主
回答量:18
采纳率:0%
帮助的人:15.1万
展开全部
最简单的办法是使用STL库中的vector。
如果用VC,也可以用CArray。
自己定义的话可以参考vector或CArray的代码。
思路是:首先是动态申请一块内存,然后根据需要插入删除数据项或重新申请更大的内存并拷贝数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cossbow
2013-04-19 · TA获得超过697个赞
知道小有建树答主
回答量:798
采纳率:100%
帮助的人:224万
展开全部
也可以用new和delete动态分配内存
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hushihua1986
2013-04-19
知道答主
回答量:1
采纳率:0%
帮助的人:1511
展开全部
你可以用vector<char>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式