2014-10-31 185 views
0

我想知道爲什麼以下程序的輸出是「WAHNAHNN」。指向char數組的指針

我的問題是: 爲什麼索引i超過p [4](即超過數組的長度),爲什麼在「WAHN」之後會產生另一個「AHNN」?

我仍然與p + i(應該是位置)和*(p + i)之間的差異混淆,這應該是一個值。爲什麼在兩種情況下輸出都是一個值?

#include <iostream> 
using namespace std; 
int main() 
{ 
    char a[] = "WAHN"; 
    char *p = a; 
    for (int i=0; p[i]; i=i+1) 
     switch (i%2) { 
      case 0: cout << p+i; 
      break; 
      case 1: cout << *(p+i); 
      break; 
     } 
    return 0; 
} 
+0

原因是'ostream'上的'operator <<'重載了'char *'[你可以在文檔中看到](http://www.cplusplus.com/reference/ostream/ostream/免運營商/) – PeterT 2014-10-31 12:38:51

+0

很難理解你的困惑。 i = 0打印字符串「WAHN」,i = 1打印字符「A」,i = 2打印字符串「HN」,i = 3打印字符「N」,那麼它就是你的代碼。 – mpromonet 2014-10-31 12:40:04

+1

@mpromonet請不要將C標籤添加到包含C++代碼的問題。 – Lundin 2014-10-31 15:01:59

回答

4

p + i的類型是char*

operator <<將此解釋爲空終止的字符串。這意味着程序將輸出「WHAN」(i == 0 so p + i == p,與a相同),第一次迭代爲「A」,第三次爲「HN」,最後一次爲「N」。

相關問題