Я согласен с вышеизложенным, но я решил, что также важно включить «почему»
int a; // is an integer
int *b; // pointer to an integer must be malloced (to have an array)
int c[]; // pointer to an integer must also be malloced (to have an array)
int d[5]; // pointer to an integer bu now it is initialized to an array of integers
чтобы получить b и c из простых указателей и дать им память для соответствия d используйте следующее, чтобы дать им пространство памяти
b = (int *) malloc(sizeof(int)*5);
, где он преобразует указатель, возвращенный из malloc, в указатель int и создает блок памяти, в 5 раз превышающий целое число (таким образом он будет содержать 5 целых чисел, таких как d)