Вам не нужно выделять память, она выделяется при объявлении массива указателей. Каждый указатель должен указывать на уже выделенную память, но a
, b
, c
выделяются автоматически / статически, поэтому вам не нужно об этом беспокоиться. Просто назначьте их членам массива p
и все готово.
Если p
- указатель на массив, тогда код должен быть:
int **p = malloc(sizeof(int*)*3);
...
p[0] = a; p[1] = b; p[2] = c;
...
free(p); /* when done*/
Объявление int *p[3]
создает массив указателей, а не указатель на массив.
редактировать
Если вам нужен указатель на массив, вы можете сделать это:
int a[3];
int *p = a;
И не забывайте - вы можете использовать a
в качестве указателя на массив, который он представляет, где это необходимо, вам не нужна отдельная переменная.