Если вы хотите рассматривать это как 1-мерный массив, вы должны объявить его так:
void data(int i,int arr[],int size) {
Или:
void data(int i,int *arr,int size) {
Причина заключается в том, что в противном случае, arr[i]
интерпретируется как массив из 2-х чисел, который распадается в указатель на первый элемент (и это адрес, который напечатан).
Объявление 1-мерного массива гарантирует, что arr[i]
рассматривается как int
.
Обратите внимание, что тот, кто называет эту функцию, больше не может передавать 2D-массив или, иначе говоря, не может сделать это очевидным для компилятора. Вместо этого, вы должны передать ему указатель на первый элемент, как:
data(0, &arr[0][0], 4);
Или, что то же самое:
data(0, arr[0], 4);
Это влияет только на первый вызов, рекурсивный вызов является правильным, конечно ,
Другими словами, код должен работать, нужно просто изменить объявление параметра arr
Как именно это рекурсивный ??? Вы не совсем называете свою «данные» подпрограммой из вашей «данных». – trumpetlicks
@trumpetlicks. Функция вызывает себя. –
В чем вопрос? Почему вы отметили его C, если это C++? –