繁体   English   中英

二维数组和函数

[英]2-D arrays and functions

如果按原样进行编译,下面的代码将不起作用,但是当用(*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;
}

这个原型是错误的:

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

这里pint的2D指针数组。 *绑定到左侧。

你要

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

在内部重写为与

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM