语句中的差异将1加到字符串文字中

时间:2014-08-28 01:37:36

标签: c++ string

我一直在给出以下作业来解释3个陈述中发生的事情,但我无法弄清楚。

cout << ("hello" + 1);    // ello
cout << (*"hello") + 1;   // 105
cout << (*("hello" + 1)); // e
  1. 为什么数字2是数字而不是字符?
  2. 第一个仍然没有字符吗? (结束字符串)

3 个答案:

答案 0 :(得分:6)

cout << ("hello" + 1);    // ello

您将const char[]递增1,因此您可以打印除第一个字符之外的所有内容(直到您点击空字符

cout << (*"hello") + 1;   // 105

您在此处取消引用const char[]。第一个字符是h,带有ascii代码104。添加一个即可获得105

cout << (*("hello" + 1)); // e

与以前相同,你取消引用const char[],但这次先加1。

答案 1 :(得分:6)

  1. *"hello"给出字符串的第一个字符'h',类型为char,ASCII值为104.整数提升规则表示添加{{1 {}}和charint转换为char,结果为int。输出int会给出数值。

  2. 是。字符串文字是一个以零字符结尾的数组。在其地址中添加一个给出指向数组的第二个字符的指针;数组的其余部分保持不变,因此最后仍包含零。

答案 2 :(得分:0)

&#34;你好&#34;是const char *

  1. 为什么2是数字 - &gt; *&#34;你好&#34;将是基地址的值,即h(104)的ascii值,所以104 + 1 = 105

  2. 是的,您刚刚指向e而不是h