#define _CRT_SECURRE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
//多维数组打印函数
void printArr1(int a[3][5])
{
int i,j;
for (i=0;i<3;i++)
{
for (j=0;j<5;j++)
{
printf("%d\n",a[i][j]);
}
}
}
//多维数组打印函数
void printArr2(int a[][5])
{
int i,j;
for (i=0;i<3;i++)
{
for (j=0;j<5;j++)
{
printf("%d\n",a[i][j]);
}
}
}
//多维数组打印函数
void printArr3(int (*a)[5])
{
int i,j;
for (i=0;i<3;i++)
{
for (j=0;j<5;j++)
{
printf("%d\n",a[i][j]);
}
}
}
void main()
{
int a[3][5],i=0,j=0;
int tmp =1;
for (i=0;i<3;i++)
{
for (j=0;j<5;j++)
{
a[i][j] = tmp++;
}
}
for (i=0;i<3;i++)
{
for (j=0;j<5;j++)
{
printf("a:%d\n",a[i][j]);
}
}
//多维数组名 代表? 指向一维数组的指针
//(a+i) 代表整个第i行的首地址
//*(a+i) 代表了第i行首元素的地址
//*(a+i)+j=====》&a[i][j] 代表了第i行第j列 元素的地址
//*(*(a+i)+j)=====》a[i][j] 代表了第i行第j列 的元素
//a[i]===>a[0+i]===>*(a+i)
//a[i][j]====>a[0+i][j]===>*(a+i)[j]===>*(a+i)[0+j]===>*(*(a+i)+j)
printf("a:%d,a+1:%d\n",a,a+1);//步长
printf("&a:%d,&a+1:%d\n",&a,&a+1);
printf("*(a+0):%d,*(a+1):%d\n",*(a+0),*(a+1));
{
//指向数组的指针变量
int (*pArray)[5];//告诉编译器分配4个字节的内存
pArray = a;//多维数组名的本质就是数组指针,步长为 一维的长度
for (i=0;i<3;i++)
{
for (j=0;j<5;j++)
{
//printf("a:%d\n",pArray[i][j]);
printf("a:%d\n",*(*(pArray+i)+j));
}
}
}
printf("-----------\n");
//多维数组打印函数
printArr1(a);
printf("-----------\n");
printArr2(a);
printf("-----------\n");
printArr3(a);
system("pause");
return;
}
结论:a是一个指向int myarray[5]的数组指针 a+1 向后跳5*4,跳一行。