指针和'char buffer [128]'的引用

时间:2013-06-05 11:41:12

标签: c++ pointers reference

我有一个简单的程序:

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;

一样

为什么会这样?

4 个答案:

答案 0 :(得分:5)

这是因为&buffer[0]char*,并且有std::ostream& operator<< overload for const char*假设它是以空字符结尾的字符串的第一个元素,并打印其字符。< / p>

答案 1 :(得分:1)

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

并打印整个数组。

答案 2 :(得分:0)

因为它是一样的。 buffer [0]是缓冲区的反向参考,偏移量为0(*(缓冲区+ 0))。比你再次计算它的地址,你得到缓冲区。

答案 3 :(得分:0)

你应该试试

cout << (void*) buffer << endl