2014-02-15 6 views
0

Я использую рекурсивную технику для отображения 2d-массива, я рассматриваю массив 2d как массив 1 d, но дает мне выходной адрес. Скажите, пожалуйста, что делать.Рекурсивная функция 2D-массива

void data(int i,int arr[2][2],int size){ 
if(i<4){ 

    if(i%2==0){ 
     cout<<endl; 
    } 
    cout<<arr[i]<<" "; 
    data(i+1,arr, size); 

} 
+2

Как именно это рекурсивный ??? Вы не совсем называете свою «данные» подпрограммой из вашей «данных». – trumpetlicks

+0

@trumpetlicks. Функция вызывает себя. –

+0

В чем вопрос? Почему вы отметили его C, если это C++? –

ответ

1

Если вы хотите рассматривать это как 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

0

Вы не можете напечатать массив как этот

cout<<arr[i]<<" "; 

Это будет дает вам адрес первого элемента

Если вы хотите напечатать все элементы массива, вам нужно использовать петлю

for (int j = 0; j < 2; j++) cout<<arr[i][j]<<" "; 
+0

Я хочу это рекурсивно – user3215228

+0

Он сказал, что хочет рассматривать его как 1D-массив. –

+0

Не используйте рекурсию для таких проблем. Его избыток. –

Смежные вопросы