我想了解数组地址的含义? 我写了下面的代码试图理解其含义,但我无法理解它?
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;
每个的输出是什么,为什么第二个和第四个的输出相同?
std::cout << d <<std::endl;
这里数组衰减为指向其第一个元素的指针(
char*
)。由于存在 operator<<
重载,需要 const char*
才能打印 C 字符串,因此会打印字符串 Ashish
。
std::cout << &d <<std::endl;
在这里,您获取数组的地址以形成指向
char[7]
的指针。没有具体的 operator<<
重载,但 void*
有一个后备重载,它将用于打印地址。
std::cout << &d[0] <<std::endl;
在这里,您形成了一个指向数组中第一个元素的指针。同样,这是一个
char*
,并且将使用与第一种情况相同的 operator<<
。
std::cout << (void*)&d[0] <<std::endl;
在这里,您形成了一个指向数组中第一个元素的指针,但将其强制转换为
void*
,因此第二种情况中使用的 operator<<
重载也将在此处使用。