2014-08-28 53 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