指向'char buffer[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;

为什么会这样?

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

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

并打印整个数组。

因为它是一样的。 buffer[0] 是偏移量为 0 (*(buffer+0(( 的缓冲区的取消引用。然后你再次计算它的地址,你会得到缓冲区。

你应该试试

cout << (void*) buffer << endl

最新更新