为什么解除引用数组会产生相同的地址?

Pal*_*han 10 c++ pointers

在C++中,我编写了以下简单的main:

int main() {
    char test[100];
    void* a = (void*) test;
    void* b = (void*) &test;

    std::cout << a << " " << b << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给了我相同的结果ab.为什么是这样?我希望第二个是第一个地址的符号.

hac*_*cks 6

在C++中,数组被转换为指向数组第一个元素的指针.test是指向第一个元素的指针test[0].&test是整个数组的地址test.虽然,它们的类型test&test不同,它们的值是相同的,这就是为什么你得到相同的值.

例如

int a[3] = {5, 4, 6};  
Run Code Online (Sandbox Code Playgroud)

请看下图:

在此输入图像描述

有关详细说明,请阅读此答案.