二维数组的递归函数

时间:2014-02-15 18:56:25

标签: c++

我使用递归技术显示2d数组,我将2d数组视为1 d数组,但给出了像地址一样的输出。请告诉我该怎么做。

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 个答案:

答案 0 :(得分:1)

如果要将其视为1d数组,则必须将其声明为:

void data(int i,int arr[],int size) {

或者:

void data(int i,int *arr,int size) {

原因是,否则,arr[i]被解释为一个包含2个整数的数组,它会衰减成指向第一个元素的指针(这就是打印的地址)。

将其声明为一维数组将确保arr[i]被视为int

请注意,无论谁调用此函数都不能再传递2D数组,或者换句话说,无法使编译器显而易见。相反,您必须将指针传递给第一个元素,如:

data(0, &arr[0][0], 4);

或等同地:

data(0, arr[0], 4);

这只会影响第一次调用,当然递归调用是正确的。

换句话说,代码应该可以工作,你只需要更改参数arr的声明

答案 1 :(得分:0)

你不能像这样打印数组

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

这将为您提供第一个元素的地址

如果要打印数组的所有元素,则需要使用循环

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