2014-08-28 52 views
6

我一直在给出下面的任务来解释3个语句中发生了什么,但我无法弄清楚。在语句中添加1到字符串文字的区别

cout << ("hello" + 1); // ello 
cout << (*"hello") + 1; // 105 
cout << (*("hello" + 1)); // e 
  1. 为什么是2号数字,而不是一个角色?
  2. 确实第一个还有零个字符? (于端线)

回答

6
  1. *"hello"给出串,'h'的第一个字符,char类型,具有ASCII值104的整数提升规则意味着,加入charint的情况下,char转换为int,给出类型为int的结果。输出int给出数值。

  2. 是的。字符串文字是一个以零字符结尾的数组。给它的地址加1会给出数组第二个字符的指针;数组的其余部分保持不变,所以仍然包含最后的零。

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。

+2

值得注意的是字符串文字是'const char [N]'s。 – chris 2014-08-28 01:42:24

+0

您无法取消引用数组。您取消引用阵列衰减的指针。 – 2014-08-28 01:45:46

0

“你好”是const char *

  1. 为什么2号 - > * “你好” 将在基地址值,该值是h(104)的ASCII值,所以104 + 1 = 105

  2. 是,你是刚才指向e而不是h

+1

'“你好”'是'const char [6]'。 – chris 2014-08-28 01:46:05

+0

@chris字符串是字面我猜,所以它可以是const char *,但是'const char [6]'? – 2014-08-28 01:47:24

+0

是的,你可以用'std :: is_same'来看看自己。 – chris 2014-08-28 01:51:57