我使用递归技术显示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);
}
答案 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]<<" ";