Вы должны просто использовать * a not (* a) [0].
Помните, «а» - указатель. Указатель - это адрес.
*a = a[0] or the first integer
*(a + 1) = a[1] or the second integer
'a' не является указателем на массив. Это указатель на целое число. Таким образом, * a не возвращает вам массив для работы с [].
Что вас смущает, так это то, что адрес целочисленного массива также является адресом первого целого числа в этом массиве. Не забывайте всегда помнить тип того, что вы назначаете на левой стороне.
Рассмотрим следующее:
int x = 10;
Этот фрагмент объявляет целое число x и присваивает ему значение 10. Теперь рассмотрим это:
int *y = &x;
Этот фрагмент объявляет, что y является указателем на целое число, и назначает адрес x для y.
Вы могли бы написать это так:
int x = 10;
int *y;
y = &x;
Кстати, когда вы назначаете что-то для 'y' выше, оно просто берет данные по этому адресу и превращает их в целое число. Итак, если вы отправите его в массив char (8 бит или 1 байт каждый), а целое число будет длиной 32 бита (4 байта) в вашей системе, тогда он просто возьмет первые четыре символа массива char и преобразует результирующее 32-битное число в целое число.
Остерегайтесь указателей, здесь есть драконы.