首页 > 代码库 > 指针与二维数组间的关系

指针与二维数组间的关系

1、四种表示a[i][j]的形式是等价的:

a[i][j]==*(a[i]+j)==*(*(a+i)+j)==(*(a+i))[j]

2、通过行指针p引用二维数组a的元素a[i][j]的方法可用以下4种等价形式:

p[i][j]==*(p[i]+j)==*(*(p+i)+j)==(*(p+i))[j]

3、对指向二维数组的行指针p进行初始化的方法:

p=a 或p=&a[0]

4、对指向二维数组的列指针进行初始化的方法(以下三种方法等价):

p=a[0] 或 p=*a 或 p=&a[0][0]

5、二维数组元素的输入输出:

(1)、二维数组作形参:如

#include<stdio.h>
#define N 4
void Inputarray(int p[][N],int m,int n);
void Outputarray(int p[][N],int m,int n);
int main()
{
 int a[3][4];
 printf("Input 3*4 numbers:\n");
 Inputarray(a,3,4);
 Outputarray(a,3,4);
 return 0;
}
void Inputarray(int p[][N],int m,int n)
{
 int i,j;
 for(i=0;i<m;i++)
 {
  for(j=0;j<n;j++)
  {
   scanf("%d",&p[i][j]);
  }
 }
}
void Outputarray(int p[][N],int m,int n)
{
 int i,j;
 for(i=0;i<m;i++)
 {
  for(j=0;j<n;j++)
   printf("%4d",p[i][j]);
  printf("\n");
 }
}

(2)、二维数组的行指针作形参:如                        (3)、

#include<stdio.h>                                           //列指针作形参,适应数组列数的变化//
#define N 4
void Inputarray(int (*p)[N],int m,int n);     或者// int *p,int m,int n //
void Outputarray(int (*p)[N],int m,int n);   或者//int *p,int m,int n //
int main()
{
 int a[3][4];
 printf("Input 3*4 numbers:\n");
 Inputarray(a,3,4);                                         //*a,3,4 //
 Outputarray(a,3,4);                                       // *a,3,4 //
 return 0;
}
void Inputarray(int (*p)[N],int m,int n)           //int *p,int m,int n//
{
 int i,j;
 for(i=0;i<m;i++)
 {
  for(j=0;j<n;j++)
  {
   scanf("%d",  *(p+i)+j);                             //&p[i*n+j]  //
  }
 }
}
void Outputarray(int (*p)[N],int m,int n)        //int *p//
{
 int i,j;
 for(i=0;i<m;i++)
 {
  for(j=0;j<n;j++)
   printf("%4d",*(*(p+i)+j));                     //  p[i*n+j]  //
  printf("\n");
 }
}