char[]_指针string.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档