char *p=new char

来源:互联网 发布:淘宝助理tbi文件 编辑:程序博客网 时间:2024/05/16 19:16

1谢谢指教!
可是有一个问题是按理 return p应该返回一个字符,可是我这return p 依然是返回一个字符串, 那么说开辟一个字符空间与开辟一个字符串空间的方法是通用的?

--------------------------------------------------------------------------------
是通用的,指针这个东西很灵活,在C++的类中你还会学到用他来描述多态性。return P要看P的指向是什么了,P指向一个字符,他就返回一个字符,P指向一个字符串,他就返回一个字符串。比如说一个一个char类型数组名的就能看成一个指针(存储的是地址,但不是变量,不能对他赋值),测试“cout<<数组名”可以输出这个数组。

2.char * p = new char;相当于定义了一个字符指针,并且给这个字符指针指向动态分配了的1字节内存,这时你可以给*p='a'这样的赋值。这可和char* p;是不同的,因为如果只是char * p;的话,只是定义了一个字符指针,而这个指针指向的内存单元地址是NULL,如果这时
你再*p='a';就会出错,因为系统无法将字符'a'放入一个内存为NULL的地址空间中。
当然,像你说的p=str1;当然没有错。因为两者都是指针,对应的物理原形都是32个bit,当然可以赋值成功的。呵呵


3.可以,这样是说明指针P指向一个char类型的数而不是char类型的数组。
首先编译的时候只是检查类型匹配。
首先 char *p = new char ,
而char *str1=new char[n]。
这两个指针类型是相同的,自己体会一下
还有一个问题,
char *p = new char 是初始化,
char *p; p = new char 是赋值操作。

两者是截然不同的,初始化的效率比赋值操作要高。举个例子,比如说你参军。初始化就是你参军的时候发军服给你。赋值就是你参军的时候先随便给你一件衣服,等某天再给你一件军服。大概就是这个意思,我也是自己体会出来的,C++学久了,就明白了.

 

可是p只是指向一个字符, 如果return p应该只返回一个字符
可是我这return p依然返回的是一个字符串,这是为什么呢?

--------------------------------------------------------------------------------
呵呵,对不起呀。我刚才出去办事了。
你说的我明白,让我慢慢给你解释。首先你char* p = new char;是定义了一个字符指针,new char分配了一个bit的空间,并让p指向这个空间。
而我们在定义一个C语言传统字符串时常用char* str= "ABCDE";是因为"ABCDE"常量代表的是存放这组字符串的首地址,然后把这个地址赋给了str。
OK,讲到这里,我给你一个例子
1    #include <iostream>
2    using namespace std;
3    void main()
4    {
5     char* a= new char;
6     a = "abcde";
7     cout<<a<<endl;
8    }
结果是:abcde.
知道为什么吗?因为a只是个指针而以,它可以指向一个字符,也可以指向一个字符串。在第5行的时候,a指向的是一个一字节的char,但是在第6行的时候,a已经指向"abcde"了。所以输出的时候,就是"abcde"了。所以这个例子是一个典行的资源泄露的例子因为new char了,确没有使用,并由于a在之后已经不指向这个字符的空间,使之以后都没有机会再被释放掉了,所以这1bit空间就资源泄露了
好了,如果你还有什么问题,可以再给我消息。一起学习!

原创粉丝点击