&v
- это ссылка на массив int v
, поэтому он имеет тип int **
(по существу). int (*a)[5]
означает, что вы объявляете указатель на массив из 5 дюймов. НО, в следующей строке, когда вы пишете (*a)[5]
, это означает, что вы разыменовываете a
, чтобы получить указатель int, а затем снова разыменовываете ссылку для доступа к элементу, хранящемуся в [5]
. но массивы в C индексируются нулем, поэтому вы можете получить доступ только от [0]
до [4]
, а [5]
не выделено.
Вы хотите a = &v
. Это сделает a
указателем на int-указатель v
. Существуют и другие проблемы, такие как *a
- это указатель типа int, поэтому "%d"
не будет летать, вы не указали никаких значений для a
или v
, ((*)[])
просто не нужно и т. Д.