指针与数组

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);

    

    

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值