chencheng
驱动小牛
驱动小牛
  • 注册日期2003-06-27
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1639回复:12

问一个C++的简单问题

楼主#
更多 发布于:2004-09-22 15:19
请问
char a[5]
与 new a=char[5]
有什么区别~~~
好好学习,天天向上
lxh_phr
驱动小牛
驱动小牛
  • 注册日期2001-05-14
  • 最后登录2023-10-18
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望156点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-09-22 19:07
一个静态分配内存,一个动态分配内存。
lxh_zz
rufeng888
驱动牛犊
驱动牛犊
  • 注册日期2004-03-01
  • 最后登录2007-11-06
  • 粉丝0
  • 关注0
  • 积分161分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-22 19:25
应该是 a=new char[5]吧。否则编译要出错的,没有这样的语法。
如风
s_6666_s_qd
驱动巨牛
驱动巨牛
  • 注册日期2004-08-14
  • 最后登录2006-07-11
  • 粉丝0
  • 关注0
  • 积分199分
  • 威望22点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-23 10:17
请问
char a[5]
与 new a=char[5]
有什么区别~~~


char a[5];//(1)
////////////
char * a=new char[5];//(2)

///////////////
区别:(1)中a是具有5个char型元素的一维数组
(2)中a是指向一个大小为5*sizeof(char)内存的char型指针
FutureNow
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2007-07-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-23 10:43
还有最关键的一点是new分配的内存在用完之后需要delete,像
char * a=new char[5];
用完后一定要
delete []a; :cool:
有梦才有未来!梦是做出来的!继续做梦,努力工作,享受生活!
SUNSHANGXIN
驱动老牛
驱动老牛
  • 注册日期2002-11-19
  • 最后登录2009-08-01
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望19点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-23 19:13
不稳定
[b]苍白的,不是文字,是人的思想 虚伪的,不是网络,是人的灵魂 伤心的,不是爱情,是人的心灵 难忘的,不是容貌,是人的思诀 黎明的曙光早已不见了夕日的辉煌 东方的日出早就失去了往日的灿烂 而我也尽脱了昨日的笑容去迎接明天的枯涩 [/b]
wgmilan
驱动牛犊
驱动牛犊
  • 注册日期2004-09-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-24 11:05
同一楼上的说法
drvlover
驱动牛犊
驱动牛犊
  • 注册日期2004-09-21
  • 最后登录2006-05-08
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-25 14:14
char a[5] 在栈中分配内存
new char[5] 在堆中分配内存,容易造成碎片。
chencheng
驱动小牛
驱动小牛
  • 注册日期2003-06-27
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-26 18:02
char a[5] 在栈中分配内存
new char[5] 在堆中分配内存,容易造成碎片。


各自有什么优缺点呢?
不然我们为什么不只用第一种呢?
好好学习,天天向上
chencheng
驱动小牛
驱动小牛
  • 注册日期2003-06-27
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-09-27 16:08
[quote]char a[5] 在栈中分配内存
new char[5] 在堆中分配内存,容易造成碎片。


各自有什么优缺点呢?
不然我们为什么不只用第一种呢? [/quote]

各自有什么优缺点呢?
不然我们为什么不只用第一种呢?  :)
好好学习,天天向上
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-09-27 17:15
[quote]char a[5] 在栈中分配内存
new char[5] 在堆中分配内存,容易造成碎片。


各自有什么优缺点呢?
不然我们为什么不只用第一种呢? [/quote]

首先,你得知道堆和栈的区别。
栈是由编译器管理的内存空间,通常用于存放临时变量和参数传递。
她的分配和回收由编译器完成。遵循后分配,先释放的原则。
堆是由程序自身(程序员)管理的空间。你可以进行分配,但你也要负责释放,否则,会出现内存泄漏,可用内存会变少。

通常,栈空间使用较为方便,但大小是有限制的。尤其当你写DLL的时候,它的栈空间使用的是调用方的栈空间。

所以建议:小的临时变量尽量使用栈空间,大量空间(几兆),且不经常重复分配的,使用堆空间。使用new和delete尽量把new放在构造函数中,delete放在析构函数中。
A strong man can save himself. A great man can save another.
hhyjmd
驱动牛犊
驱动牛犊
  • 注册日期2004-06-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分104分
  • 威望11点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-09-29 19:38
简单的说就是用new申请的需要用delete删除
而直接定义的不用
chencheng
驱动小牛
驱动小牛
  • 注册日期2003-06-27
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-09-30 10:12
[quote][quote]char a[5] 在栈中分配内存
new char[5] 在堆中分配内存,容易造成碎片。


各自有什么优缺点呢?
不然我们为什么不只用第一种呢? [/quote]

首先,你得知道堆和栈的区别。
栈是由编译器管理的内存空间,通常用于存放临时变量和参数传递。
她的分配和回收由编译器完成。遵循后分配,先释放的原则。
堆是由程序自身(程序员)管理的空间。你可以进行分配,但你也要负责释放,否则,会出现内存泄漏,可用内存会变少。

通常,栈空间使用较为方便,但大小是有限制的。尤其当你写DLL的时候,它的栈空间使用的是调用方的栈空间。

所以建议:小的临时变量尽量使用栈空间,大量空间(几兆),且不经常重复分配的,使用堆空间。使用new和delete尽量把new放在构造函数中,delete放在析构函数中。 [/quote]

谢谢大家,bow~~~~~~~~~~~~~
好好学习,天天向上
游客

返回顶部