VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2771|回复: 18

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

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-24 15:40:02 | 显示全部楼层 |阅读模式
程序运行时动态申请一块内存该用哪个?
这两个有什么区别?
回复

使用道具 举报

0

主题

17

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-2-10 21:45:01 | 显示全部楼层
new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符
new char[50]申请50个字符的空间
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-2-11 11:45:01 | 显示全部楼层
对于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;
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-2-11 14:00:01 | 显示全部楼层
1、地址越界危险
2、delete []q;
回复

使用道具 举报

0

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-11 16:45:02 | 显示全部楼层
new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符
new char[50]申请50个字符的空间
错!!
c++编译器给出着2种写法是考虑到使用者习惯的原因。
前一种看起来象函数参数。
后一种则是出于象数组申请一样的考虑。
实际运行这2种写法不存在任何的区别和问题
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-12 09:15:02 | 显示全部楼层
makeyou

................
实际运行这2种写法不存在任何的区别和问题
========================================
还说得那么斩钉截铁,错的是你耶
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-2-12 10:00:01 | 显示全部楼层
这两种还是有区别的
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就结束了

对于这两种写法我很迷惑!到底该用哪一种,这两种写法分别给我分配了多大的内存?
回复

使用道具 举报

0

主题

6

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-2-12 16:00:01 | 显示全部楼层
楼上的不对吧!
"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
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-2-14 10:15:01 | 显示全部楼层
同意:
new char(50)相当于只申请一个字节的内在,它的值为ASCII=50的字符"说的是对的
不同意makeyou所说的
回复

使用道具 举报

0

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-2-15 21:30:01 | 显示全部楼层
makeyou 兄弟没有理解C++的构造函数对基本类型也是有效的....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表