C++中的数组和指针试图理解数组地址的含义

Ash*_*ish 1 c++ arrays pointers c-strings

我试图了解数组地址的含义。

我写了下面的代码来尝试理解其含义,但我无法理解它:

char d [] {"Ashish"};

std::cout << d <<std::endl;

std::cout <<&d <<std::endl;

std::cout <<&d[0] <<std::endl;

std::cout <<(void*)&d[0] <<std::endl;
Run Code Online (Sandbox Code Playgroud)

每个语句的输出是什么?为什么第二条和第四条语句的输出相同?

Ted*_*gmo 6

std::cout << d <<std::endl;

这里,数组衰减为char*指向其第一个元素的指针 (a )。由于为了能够打印 C 字符串而operator<<进行了重载,因此会打印该字符串。const char*Ashish

std::cout << &d <<std::endl;

在这里,您获取数组的地址以形成指向 a 的指针char[7]。没有具体的operator<<重载,但有一个后备重载void*将用于打印地址。

std::cout << &d[0] <<std::endl;

在这里,您形成了一个指向数组中第一个元素的指针。同样,这是一个char*operator<<第一种情况相同的情况。

std::cout << (void*)&d[0] <<std::endl;

在这里,您形成了一个指向数组中第一个元素的指针,但将其强制转换为void*因此operator<<第二种情况中使用的重载也将在这里使用。