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

问题描述 投票:0回答:1

我想了解数组地址的含义? 我写了下面的代码试图理解其含义,但我无法理解它?

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;

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

c++ arrays pointers c-strings
1个回答
0
投票

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<<
重载也将在此处使用。

© www.soinside.com 2019 - 2024. All rights reserved.