C++字符串的问题

C++primerplus这本书说“"s"表示两个字符组成的字符串。”又说”"s"实际上表示的是字符串所在的内存地址”。那么到底表示的是什么东西,这本书我好多看不懂。为什... C++primer plus这本书说“"s"表示两个字符组成的字符串。”又说”"s"实际上表示的是字符串所在的内存地址”。那么到底表示的是什么东西,这本书我好多看不懂。
为什么字符串变量不能赋值,而又可以用cin赋值?
展开
 我来答
xoaxa
2014-09-08 · TA获得超过8607个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3397万
展开全部
对于 chat *s = "ab"; s表示字符串,这可以理解,实际上s是指针,其指向字符串"ab"的存放的首地址,也就是'a'的存放地址,说法上确实让人费解,等熟悉之后,就不觉得这个说法的荒唐了,大家都是从这过来的。
在声明字符串时,可以初始化,但不能后期赋值,这与编译程序分配地址空间有关系,例如char *p;,声明p为char型指针,p的存放地址分配了,但并没有给p指向的地址分配空间,说起来有点绕,比如 p = "abc";是错的。但char *p = "abc";可以,这是在编译时,编译程序分配的空间,而 p = "abc";要求在运行时分配空间,这在C/C++中是不允许的,如果你需要这么做,可以用C中的malloc()函数,或C++中的new关键字在堆内存上分配空间,但不能在栈内存上分配。扯的有点远。
cin是istream类的一个对象,通过重载>>来读取键盘输入的内容,对于char s[MAX];,最多可以读取MAX - 1个字符,如果长于MAX -1可能造成意外(覆盖其他变量),这是为字符数组赋值,类似C函数gets(s),但会将空白字符单做分隔符,而gets(s)则不会。
TableDI
2024-07-18 广告
当我们谈到Python与Excel的拆分时,通常指的是使用Python的库来读取Excel文件中的数据,然后根据某种逻辑(如按行、按列、按特定值等)将数据拆分成多个部分或输出到新的Excel文件中。上海悉息信息科技有限公司在处理这类任务时,... 点击进入详情页
本回答由TableDI提供
642985327
2014-09-08 · TA获得超过763个赞
知道小有建树答主
回答量:156
采纳率:100%
帮助的人:108万
展开全部
“s”之所以说成是2个字符,是因为C语言中字符串末尾都会添加\0表示结束,“s”在内存中的实际形式是‘s’‘\0’这里的\0是转意字符,表示一个空白字符。

“字符串”这种表示形式在C语言中返回的是一个指向字符串第一个字符的地址,你写cout << “字符串”
实际上是从这个字符串存放的首地址开始,读取字符,一直读取到\0时就结束读取。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
文英秀01d
2014-09-08 · 超过59用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:131万
展开全部
C++中 字符串类string的比较采用和字体按排序相同的策略,2点 1.如果2个string对象长度不同 ,并且断的string对象与长的string对象的前面部分像匹配,短的string对象就小于长的string对象 小的就排在大的前面 比如 "abc"排在"abcdef"前面 2.如果2个string对象的字符不同,则比较第一个不匹配的字符 我举几个例子 str1 = "Hello" str2 = "Hello World" str3 = "Helae"
按从小到大排序的顺序是 str3 < str1 < str2 3个字符串前面3个字符都是Hel str3第四个字符是a ASCII码值小于l 所以是最小的 这么解释希望你明白了 如果还有问题再联系我~ 这道题直接判断第一个字母e是在s前面 就是后面的字符串字面值大于前面的 没有问题~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式