У вас две проблемы:
Индексы массива начинаются с нуля.То есть массив из N элементов имеет индексы от 0
до N - 1
(включительно)
Объявление int *v[1]
объявляет v
как массив одного указателя на int
, а не указатель на массив из одного int
.Это было бы int (*v)[1]
.Это также тип &v
из функции main
.
Решение второй проблемы (с использованием правильного типа) приводит к третьей проблеме, так как это означаетчто *v[0]
неверно из-за приоритета оператора .Здесь также необходимо использовать скобки, как в (*v)[0]
.
Однако вторая (и следующая третья) проблема спорная, поскольку выне нужно передавать массивы «по ссылке».
Массивы естественным образом распадаются на указатели на их первый элемент.При использовании обычного v
, когда ожидается указатель на int
, компилятор автоматически переведет его как &v[0]
.
Это означает, что вы можете объявить функцию, просто приняв int *
в качестве аргумента,и просто передайте простой v
в качестве аргумента.