C++动态开辟内存问题

来源:百度知道 编辑:UC知道 时间:2024/07/07 10:19:53
如果要在堆中开辟一个装字符串内存,是否用char *p = new char[字符串长度+1];如果用char * p = new char可不可以;
我做了个字符串类
用p 接受字符串

char *p = new char
p = str1(str1是一个字符指针)这样也不报错;为什么呢?
在多问一个,char *p = new char 和 char *p; p = new char 有什么区别吗?

呵呵,我也来回答一下吧。楼主看着给几分就行了。
如果要动态在堆中分配字符串内存,用char *p = new char[字符串长度+1];最后加的1是为了留给字符串结束符'\0'。
char * p = new char;相当于定义了一个字符指针,并且给这个字符指针指向动态分配了的1字节内存,这时你可以给*p='a'这样的赋值。这可和char* p;是不同的,因为如果只是char * p;的话,只是定义了一个字符指针,而这个指针指向的内存单元地址是NULL,如果这时
你再*p='a';就会出错,因为系统无法将字符'a'放入一个内存为NULL的地址空间中。
当在,像你说的p=str1;当然没有错。因为两者都是指针,对应的物理原形都是32个bit,当然可以赋值成功的。呵呵!

可以,
但是在使用前需要用malloc分配内存

可以,这样是说明指针P指向一个char类型的数而不是char类型的数组。
首先编译的时候只是检查类型匹配。
首先 char *p = new char ,
而char *str1=new char[n]。
这两个指针类型是相同的,自己体会一下
还有一个问题,
char *p = new char 是初始化,
char *p; p = new char 是赋值操作。
两者是截然不同的,初始化的效率比赋值操作要高。举个例子,比如说你参军。初始化就是你参军的时候发军服给你。赋值就是你参军的时候先随便给你一件衣服,等某天再给你一件军服。大概就是这个意思,我也是自己体会出来的,C++学久了,就明白了

char * p = new char

相当于
char * p = new char[1];

也就是说这个p只能当一个char用,不能当字符串用,就好比一个char a[1]; 基本上没什么意义。

new char的话,指针只指向一个字符.

另外,flashingair的解释有点小问题.
char * p = new char