二维数组和函数

时间:2015-12-13 15:35:24

标签: c

如果按原样编译,则以下代码无法正常工作,但是当您将*(p+i*C+j)替换为(*p+i*C+j)时,它可以正常工作。任何人都可以帮助我理解为什么,因为我学到的相同功能的方法已经在代码中了?另外,我编写了其他具有相同语法并完美工作的代码。我不知道为什么这个不起作用。

#include <stdio.h>
void disp(int *p[][20],int R,int C)//Method 1
{int i,j;
 printf("Elements are(disp):\n");
 for(i=0;i<R;i++)
 {for(j=0;j<C;j++)
  {printf("%d ",p[i][j]);
  }
  printf("\n");
 } 
}
void disp1(int *p,int R,int C)//Method 2
{int i,j;
 printf("Elements are(disp1):\n");
 for(i=0;i<R;i++)
 {for(j=0;j<C;j++)
  {printf("%d ",*(p+i*C+j));
  }
  printf("\n");
 }
}
int main()
{int i,j,R,C,a[20][20];
 printf("Enter R and C");
 scanf("%d %d",&R,&C);
 printf("\nEnter the elements:");
 for(i=0;i<R;i++)
 {for(j=0;j<C;j++)
  {scanf("%d",&a[i][j]);
  }
 }
 disp(a,R,C);
 printf("\n\n");
 disp1(a,R,C);
return 0;
}

1 个答案:

答案 0 :(得分:1)

这个原型是错误的:

void disp(int *p[][20],int R,int C)

此处p是指向int的2D指针数组。 *绑定在左侧。

你想要

void disp(int p[20][20],int R,int C)

在内部被重写为与

相同
void disp(int (*p)[20],int R,int C)

但你应该坚持使用[20][20]的版本,这样可以明确你的意图。