2013-06-05 29 views
-1

我有一個簡單的程序:指針和引用「字符緩衝區[128]」

char buffer[128];      // creates an array of 128 elements 
memset(&buffer, 65, sizeof(buffer)); // fills buffer with 'A' (ascii 65) letter 
cout << buffer << endl;    // prints whole buffer - 128 times 'A' letter 
cout << &buffer << endl;    // prints adress of a buffer (first element of it) 
cout << buffer[0] << endl;    // prints first element of a buffer 

到現在爲止一切都很正常,但我不明白爲什麼,當我把這:

cout << &buffer[0] << endl;   

恕我直言,上面的代碼應該打印在緩衝區(同&buffer)的第一元素的地址,但它打印整個緩衝區,就像cout << buffer << endl;

爲什麼出現這種情況?

+0

的memset的後,添加緩衝液[的sizeof(緩衝器)-1] = '\ 0';因爲在某些情況下你會想要一個以零結尾的字符串。 – Nicholaz

回答

1
&buffer[0] == buffer + 0 == buffer 

並打印整個數組。

0

因爲它是一樣的。緩衝區[0]是取消偏移0(*(緩衝區+ 0))的緩衝區的引用。比你再次計算它的地址,你得到緩衝區。

0

你應該嘗試

cout << (void*) buffer << endl