- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
char[]_指针string.txt懂得放手的人找到轻松,懂得遗忘的人找到自由,懂得关怀的人找到幸福!女人的聪明在于能欣赏男人的聪明。生活是灯,工作是油,若要灯亮,就要加油!相爱时,飞到天边都觉得踏实,因为有你的牵挂;分手后,坐在家里都觉得失重,因为没有了方向。string str_s = abc;
char *str_cp = abc;
char str_ca[] = abc;
请问此时,str_s、str_cp、str_ca有什么区别?他们都是指针吗?
我知道*str_cp的abc多了一个/0
str_ca相当于一个char * const str_cp
⑴我主要是想知道str_s 和 str_cp的区别,他们都是指针吗?可以相互操作吗?
只有str_cp是指针,我想知道更底层的。因为str_ca本质上也是个指针,只是const的指针。
string str_s 本质上是什么呢?他和str_cp指向的是同一个地址吗?(此处不必考虑内存中有两个 abc,就对str_s,str_cp分开讨论。)
⑵最近做一个文件存储和读写,用的是string可以,read() write() get() 等方法参数老是char * 我不得不把string转化为char *
还有什么更好的方法吗?一般做开发都得转换成 char*的吗?c++不是鼓励用string吗?那在文件操作那怎么还是要转化成 char* 呢?我实在不想用char *
⑶我可以在一个函数里返回一个 数组名称/string变量/char *,然后给一个 char * /string/char[] 这样赋值行吗?
⑷char * 是以\0判断字符串结束的。
而char *str_cp 保存的就是abc的首地址,即a的地址,那此时我如果cout str_cp[1] 此时指向b如果以\0为结束标志的话,应该输出的是bc 啊,但结果是 b ,必须coutstr_cp+1才可以输出 bc 为什么?
这四个问题一直困扰着我,且相互有联系的,为此向各位请教了,多谢。
作者:eastcowboy 发表时间:2008-6-11 9:22:00
第1楼
string str_s = abc;
char *str_cp = abc;
char str_ca[] = abc;
1. str_cp是指针,指向一段数据有四个元素,分别是a, b, c, \0。
2. str_ca是数组,它包含四个元素,分别是a, b, c, \0。
引用:
我知道*str_cp的abc多了一个/0
这个说法不正确。数组str_ca也会有\0。但如果你写char str_ca[] = {a, b, c}则不会有\0。
3.
引用:
str_ca相当于一个char * const str_cp
这个说法不正确。数组和指针是不同的,数组不能看作常指针。证据就是:
char* const s = abcdef;
char a[] = abcdef;
则sizeof(s)一般为2或者4,而sizeof(a)为7。
指针只保存了所指向的地址,数组既包括首地址的信息,还包括长度的信息。不过数组在作为参数传递时,可以转化为指针的形式(数组首地址作为指针所指地址,数组长度信息被丢弃)。
4.
引用:
string str_s 本质上是什么呢?
从对象的观点看。str_s就是一个对象,其中包含了字符串数据,如此而已。至于对象内部是如何操作,以保证正确的包含这个字符串数据,这完全取决于string类的作者。这种现象体现了面向对象编程思想中的一个重要观点——封装。作为类的使用者,我们只要知道它应该怎么用即可,不需要知道它是如何工作的。也就是说不需要知道它的本质。
当然我们也不能一无所知。为了更好的使用这个类,它的基本特性要了然于心。比如,我们要知道string中的字符是连续存储的,而不是通过链表来进行存储的。等等。
5.
引用:
一般做开发都得转换成 char*的吗?
不是的。C++本身的输入输出就直接支持string。比如:
string s;
cin s;
cout s;
虽然string是鼓励的,但这并不意味着char*就是应该被抛弃的。很多时候还是会用到char*。例如你从zip包中解压出一个文件,因为很多zip压缩解压的程序都用C语言写,因此文件解压得到的数据在内存中很可能就是以char*的形式存在的。
6.
引用:
我可以在一个函数里返回一个 数组名称/string变量/char *,然后给一个 char * /string/char[] 这样赋值行吗?
这个问题比较细,下面一点一点的分析。
(1) 返回一个char*,赋值给char*。可以。
(2) 返回一个char*,赋值给
文档评论(0)