1、数组的本质:数组的数组
2、指针的本质:指针就是地址。
3、数组与指针的关系:没有任何关系!指针就是指针,数组就是数组。借用《征服c指针》这本书的一句话:只有在声明语句中,[]才表达数组的含义,在表达式中,[]与数组无关!
4、代码示例:
//一维数组与指针的关系
void one_dimensional_array(){
int array[3]={11,22,33};
int *pa = array;
int (*pb)[3] =&array;
printf("array is %p,value is %d. \n",array,*array); //11
printf("*pa is %p,value is %d. \n",pa,*pa); //11
printf("*(pa+1) is %p,value is %d. \n\n",pa+1,*(pa+1)); //22
printf("**pb is %p,value is %d. \n",pb,**pb); //11
printf("**(pb+1) is %p,value is %d. \n",(pb+1),**(pb+1)); //越界
printf("*(*pb+1) is %p,value is %d. \n",*pb+1,*(*pb+1)); //22
}
//二维数组与指针关系
void second_dimensional_array(){
int array[2][3] = {
{11,12,13},
{21,22,23}
};
int (*pa)[3] = array;
int (*pb)[2][3] = &array;
int (*pc) = array[0];
int (*pd)[3] = &array[0];
int pe = array[0][0];
int (*pf) = &array[0][0];
printf("array is %p,value is %d. \n",array,**array); //11
printf("**pa is %p,value is %d. \n",pa,**pa); //11
printf("**(pa+1) is %p,value is %d. \n",pa+1,**(pa+1)); //21
printf("*(*pa+1) is %p,value is %d. \n\n",(*pa+1),*(*pa+1)); //12
printf("***pb is %p,value is %d. \n",**pb,***pb); //11
printf("***(pb+1) is %p,value is %d. \n",**(pb+1),***(pb+1)); //越界
printf("**(*pb+1) is %p,value is %d. \n",*(*pb+1),**(*pb+1)); //21
printf("*(**pb+1) is %p,value is %d. \n\n",(**pb+1),*(**pb+1)); //12
printf("*pc is %p,value is %d. \n",pc,*pc); //11
printf("*(pc+1) is %p,value is %d. \n\n",pc+1,*(pc+1)); //12
printf("*pd is %p,value is %d. \n",pd,**pd); //11
printf("**(pd+1) is %p,value is %d. \n",*(pd+1),**(pd+1)); //21
printf("*(*pd+1) is %p,value is %d. \n\n",(*pd+1),*(*pd+1)); //12
printf("pe's value is %d.\n",pe); //11
printf("*pf is %p,value is %d. \n",pf,*pf); //11
}
//三维数组与指针关系
void three_dimensional_array(){
int array[2][3][4] = {
{
{11,12,13,14},
{21,22,23,24},
{31,32,33,34}
},
{
{41,42,43,44},
{51,52,63,54},
{61,62,63,64}
}
};
int (*pa)[3][4] = array;
int (*pb)[2][3][4]= &array;
int (*pc)[4] = array[0];
int (*pd)[3][4] = &array[0];
int (*pe) = array[0][0];
int (*pf)[4] = &array[0][0];
printf("ary is %p,value is %d. \n",array,***array);
printf("*pa is %p,value is %d. \n",pa,***pa);
printf("*pb is %p,value is %d. \n",pb,****pb);
printf("*pc is %p,value is %d. \n",pc,**pc);
printf("*pd is %p,value is %d. \n",pd,***pd);
printf("*pe is %p,value is %d. \n",pe,*pe);
printf("*pf is %p,value is %d. \n",pf,**pf);
}