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空间就资源泄露了。
好了,如果你还有什么问题,可以再给我消息。一起学习!
- char *p=new char
- char *p=new char
- char* p = new char [20] delete p 出现问题!
- char *p = new char[256]; delete p; / delete[] p; 哪个对 为什么
- char *p = new char; 和 char *p2 = "abcdef"的区别
- char *p = "world";
- char*p char p [] char* p[]
- char*以及char*p
- char *p
- char*p 和 char p[]
- char* p 和char p[]
- char (*p)[]与char *p[]
- char *p与char p[]
- char *p、const char *p
- char p[] and char* p
- char *p 和char *p[]
- char* p与char p[]
- char* p和char p[];
- WINCE5.0+S3C2443系统每隔几分钟会自动关闭LCD显示
- WINCE5.0+2443 camera中断不能进来的原因
- 基于xp系统搭建android开发环境
- WINCE config.bib文件中的FSRAMPERCENT的意义
- WINCE6.0+S3C2443的启动过程---eboot3
- char *p=new char
- CE5.0 - romimage.exe如何填充eboot.bin中的pTOC特殊指针生成.nb0
- 开通博客
- 透视图中的坐标还原
- 近期百度优化心得体会
- 笔式鼠标设想
- 面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)
- shell初学
- word文档参考文献如何自动编号