Почему разыменование массива или не приводит к тому же адресу?

В С++ я написал следующую простую основную информацию:

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

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

    return 0;
}

И это дает мне тот же результат для a и b. Почему это? Я бы ожидал от обозначений, что второй будет адресом первого.

Ответ 1

В С++ массивы преобразуются в указатель на первый элемент массива. test - указатель на первый элемент test[0]. &test - это адрес всего массива test. Хотя тип test и &test различен, их значения одинаковы и поэтому вы получаете одинаковое значение.

Например

int a[3] = {5, 4, 6};  

Посмотрите на приведенную ниже диаграмму:

enter image description here

Подробнее об этом читайте .