指针与二维数组

来源:互联网 发布:伊登软件 编辑:程序博客网 时间:2024/06/10 09:43
#include <stdio.h>
 


int main()
{
int  a[3][4] = {
                 00,01,02,03,
                 10,11,12,13,
                 20,21,22,23 
                  };


  //---------------------------------------下面2种等价--------------------------------------------


 
printf("a                        指向一维数组a[0],即0行首地址:%p\n",  a );
printf("a+1                    指向一维数组a[1],即1行首地址:%p\n", a+1);




int(*p)[4] = a;  //指向一个长度为4的一维数组的指针 (行指针)
printf("p                        指向一维数组a[0],即0行首地址:%p\n", p);
printf("p+1                    指向一维数组a[1],即1行首地址:%p\n", p + 1);


/*
地址:00000000002BFB78
        地址:00000000002BFB88
两个地址相差  10 即16字节,  正好 一行元素的空间  4*4
*/
 
//------------------------------------下面3种等价-----------------------------------------------


printf(" *a                         a[0][0]首地址:%p\n", *a);
printf(" *a + 1                  a[0][1]首地址:%p\n", *a + 1);


printf("&a[0][0]   a[0][0]首地址:%p\n", &a[0][0]);
printf("&a[0][0]+1   a[0][1]首地址:%p\n", &a[0][0] + 1);


printf("a[0]                      a[0][0]首地址:%p\n", a[0]);
printf("a[0]+1                  a[0][1]首地址:%p\n", a[0]+1);
 


/*
地址:00000000002BFB78
        地址:00000000002BFB7C
两个地址相差  4 字节,  正好 一个元素的空间  
*/


//-----------------------------------指针剖析---------------------------------------------------
 
int  *  arr1[5];  //指针数组
int  ** p1 = arr1; //指针的指针


       int   arr2[3][5]; //元素是数组的数组        
       int  (*p2)[5] = arr2;  //数组指针 (行指针)
 


       int   arr3[5];

       int  *p3 = arr3; //普通整形指针



        int  arr4[5];
        int(*p4)[5] =& arr4;  //数组指针 (行指针)

 
 
return 0;
}


 
原创粉丝点击