2018-04-19指向多维数组的指针

声明

int (* pz)[2];//pz指向一个内含两个int类型值的数值

比较

int *pz[2];//pz是一个内含两个指针元素的数组,每个元素都指向int的指针

由于[]优先级高,先于pz结合,所以pz成为一个内含两个元素的数组。然后表示pz数组内含有两个指针。最后,int表示pz数组中的指针都指向int类型的值。因此,这行代码声明了两个指向int的指针。而前面又圆括号的版本,先于pz结合,因此声明的是一个指向指针(内含两个int类型的值)的指针。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int zippo[4][2]={{2,4},
                     {6,8},
                     {1,3},
                    {5,7}}; 
    int (*pz)[2]; 
    pz=zippo;
    printf("zippo=     %p,  zippo+1=     %p\n",zippo,zippo+1);
    printf("pz=     %p,  pz+1=     %p\n",pz,pz+1);
    printf("zippo[0]=  %p,  zippo[0]+1=  %p\n",zippo[0],zippo[0]+1);
    printf("pz[0]=  %p,  pz[0]+1=  %p\n",pz[0],pz[0]+1);
    printf("*******************************************************\n");
    printf("*zippo=    %p,*zippo+1=      %p\n",*zippo,*zippo+1);
    printf("*pz=    %p,*pz=      %p\n",*pz,*pz+1);//*zippo==zippo[0];zippo[0]是zippo[0][0]地址,所以*zippo==&zippo[0][0]
    printf("*******************************************************\n");
    printf("zippo[0][0]=      %d\n",zippo[0][0]);
    printf("pz[0][0]=      %d\n",pz[0][0]);
    printf("*zippo[0]=        %d\n",*zippo[0]);
    printf("*pz[0]=        %d\n",*pz[0]);
    printf("**zippo=          %d\n",**zippo) ;
        printf("**pz=          %d\n",**pz) ;
    printf("zippo[2][0]=      %d\n",zippo[2][0]);
        printf("pz[2][0]=      %d\n",pz[2][0]);
    printf("*******************************************************\n");
    printf("*(*(zippo+2)+1)=     %d\n",*(*(zippo+2)+1) );
        printf("*(*(pz+2)+1)=     %d\n",*(*(pz+2)+1) );
    return 0;
}
捕获.PNG

猜想验证

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
int a[5]={1,2,3,4,50};
int *p;
    p=a;
    printf("p[2]=%d\n",p[2]);
    printf("*(p+2)=%d",*(p+2));
    return 0;
}
捕获.PNG
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容