Указатель на указатель на первый элемент массива

Хотел попробовать сделать указатель на указатель на первый элемент массива:

#include <iostream>
  
int main()
{
        int a[3] {};
        int **aa = &a;

        return 0;
}

Выдает ошибку:

test.cpp:6:13: error: cannot convert ‘int (*)[3]’ to ‘int**’ in initialization
    6 |  int **aa = &a;
      |             ^~
      |             |
      |             int (*)[3]

Ответы (2 шт):

Автор решения: Mikhailo

Первый элемент массива - a[0] - имеет тип int.

Значит, указатель на него имеет тип int*:

int * aa;

Получить адрес можно, применив оператор &. Итого:

int * aa = &a[0];

Теперь ищем указатель на указатель -

int **aaa = &aa;

и понимаем, что таких указателей может быть множество - поскольку может быть множество указателей на первый элемент массива.

→ Ссылка
Автор решения: TigerTV.ru

Можно так:

#include <iostream>
  
int main() {
    int a[3] {99, 2, 3};
    int *aa = a;
    int **aaa = &aa;
    std::cout << aaa << std::endl;
    std::cout << *aaa << std::endl;
    std::cout << **aaa << std::endl;
    return 0;
}
→ Ссылка