我有一个简单的程序:
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 :(得分: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