首页 > 代码库 > 指针与二维数组间的关系
指针与二维数组间的关系
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");
}
}