new char(50) 和new char[50]的区别?

飞驰的青蛙 2007-01-03 09:01:10
程序运行时动态申请一块内存该用哪个?
这两个有什么区别?
...全文
899 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
redleaves 2007-01-04
  • 打赏
  • 举报
回复
glunoy() 兄弟没有理解C++的构造函数对基本类型也是有效的....
060 2007-01-04
  • 打赏
  • 举报
回复
TO: liangxing110() (
---引用--
int main()
{
char *p=new char(50);
cout<<*p<<endl;
char *p1=new char[50];
p1="pananwei";
cout<<p1<<endl;
return 0;
}
:回复
输出结果是正确的,但是你的代码有问题,字符串的拷贝不能使用等号,
p1="pananwei"; 这句话是“给指针p1重新赋值”,并且放弃了刚才申请的“new char[50]”,
这句代码造成了内存泄露。

TO redleaves(程序员) ( ) 信誉:110 Blog
“glunoy() 兄弟没有理解C++的构造函数对基本类型也是有效的....”
这句话是对的,可以认为基本类型也有构造函数。

讨论了这么多,好像没有什么结果 ^-^
我认为,new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符
new char[50]申请50个字符的空间

把char换成一个实际的类试试
class obj
{
pubic:
obj()
{ cout<< "obj()" << endl; }
~obj()
{ cout<< "~obj()" << endl; }
};
kenneth_lueng 2007-01-04
  • 打赏
  • 举报
回复
这个对了:
new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符
new char[50]申请50个字符的空间

new char(50);// 相当于构造函数中赋值的用法
seas110 2007-01-04
  • 打赏
  • 举报
回复
new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符
new char[50]申请50个字符的空间
===============================


todototry 2007-01-04
  • 打赏
  • 举报
回复
new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符
new char[50]申请50个字符的空间
===============================
这是对的说法
gdoupanguoqing 2007-01-04
  • 打赏
  • 举报
回复
new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符
new char[50]申请50个字符的空间

应该是这样
weixing979 2007-01-04
  • 打赏
  • 举报
回复
上面已经给出答案了.
楼上的提问题最好重新开个帖子.
YUANHUI4521 2007-01-04
  • 打赏
  • 举报
回复
一副扑克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。
要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。
YUANHUI4521 2007-01-04
  • 打赏
  • 举报
回复
一个C语言题目:这是中国民间的一个游戏。两人从1开始轮流报数,每人每次可报一个数或两个连续的数,谁先报到30,谁就为胜方。请编程实现。希望有人能帮我回答,谢谢!
everygreen5000 2007-01-03
  • 打赏
  • 举报
回复
同意:
new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符"说的是对的
不同意glunoy所说的
liangxing110 2007-01-03
  • 打赏
  • 举报
回复
楼上的不对吧!
"new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符"说的是对的
#include<iostream.h>
int main()
{
char *p=new char(50);
cout<<*p<<endl;
char *p1=new char[50];
p1="pananwei";
cout<<p1<<endl;
return 0;
}
输出就为:2
pananwei
飞驰的青蛙 2007-01-03
  • 打赏
  • 举报
回复
这两种还是有区别的
int* p = new char(97);//p处字符串:"a"以a开头,后面有一些空格,估计遇到\0就结束了
int n=strlen(p);//n=16 字符串的长度不定

int* p=new char[97];//p出字符串为:"屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯妄铪"
int n=strlen(p);//n=112 值不定,估计遇到内存中的\0就结束了

对于这两种写法我很迷惑!到底该用哪一种,这两种写法分别给我分配了多大的内存?
a_b_c_abc10 2007-01-03
  • 打赏
  • 举报
回复
glunoy() ( ) 信誉:100 Blog

................
实际运行这2种写法不存在任何的区别和问题
========================================
还说得那么斩钉截铁,错的是你耶
glunoy 2007-01-03
  • 打赏
  • 举报
回复
new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符
new char[50]申请50个字符的空间
错!!
c++编译器给出着2种写法是考虑到使用者习惯的原因。
前一种看起来象函数参数。
后一种则是出于象数组申请一样的考虑。
实际运行这2种写法不存在任何的区别和问题
everygreen5000 2007-01-03
  • 打赏
  • 举报
回复
1、地址越界危险
2、delete []q;
飞驰的青蛙 2007-01-03
  • 打赏
  • 举报
回复
对于char* p=new char[50];
我可以 *(p+51)='a';
或p[51]='a';
甚至p[-10]='a';
1.访问超出申请范围的内存,并对其赋值。这样是不是太危险了?

2.在一个程序块儿内 char* p=new char[50]后,怎么释放掉它?是不是
for(char* q=p;q<p+50;p++)
delete q;
mochen5460 2007-01-03
  • 打赏
  • 举报
回复
new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符
new char[50]申请50个字符的空间

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧