使用指针操作二维数组的实现方式:
#include <stdio.h>
int calender[12][31]; //12个月 每个月31天
int (*monthp)[31]; //定义一个数组指针,指向一个长度为31的数组
//初始化
void initCalender(int calender[][31])
{
int (*monthp)[31]; //定义一个数组指针,指针指向一个具有31个元素的数组
static int a=0;
for(monthp=calender;monthp<&calender[12];monthp++) // monthp=clender表示monthp指向calender第一个元素的首地址,&calender[12]表示取calender第12个元素(一个长度为31的数组)的首地址
{
int* day;
printf("monthp addr=%p\n",monthp); //monthp++,monthp每次移动一个 数组长度*sizeof(int) 的地址
for(day=*monthp;day<(*monthp+31);day++) //day++,表示day每次移动 sizeof(int) 的地址长度
{
*day=a;
a++;
}
}
}
void printCalender(int calender[][31])
{
int (*monthp)[31];
for(monthp=calender;monthp<&calender[12];monthp++)
{
int* day;
for(day=*monthp;day<&(*monthp)[31];day++)
{
//printf("%d ",*day);
}
//printf("\n");
}
}
int main()
{
int calender[12][31]; //12个月 每个月31天
// int (*monthp)[31]; //定义一个数组指针,指向一个长度为31的数组
initCalender(calender);
printCalender(calender);
return 0;
}
运行结果: