二级指针,二级数组

1.开辟空间,必然有地址

2.&s=>0x006ffe10                           &s=>0x006ffe10     

   S=>0x006ffe1c   //&ap                    S=>0x006ffe1c   //&ap

  *s=>NULL  ap  //&a                       *s=>ap=>&b //0x006ffe28

    ap=>0x006ffe34                           **s=>*ap=>b

    **s=>*ap; // a

    二级指针,二级数组

3.int a3=0,a2=0,a1=0,a0=0;

   *p3,*p2,*p1,*p0

 二级指针,二级数组

s =>p0地址         s+1=>p1地址      

                                               (s+sizeof(int*)*1 )   加一加四个字节(s加1下一个指针所指的地址)

*s =>p0的值          *s+1=>a1       *s+sizeof(int)*1(*s加1指向下一个整形变量的地址)

**s=>指向a0值         **s+1=>a0的值加1  (值加1) 1     

    

若为char型           s+1=>p1地址(s+1)     (s+sizeof(char*)*1)

                                                       *s+1=> a1          *s+1   *s+sizeof(char)*1

                                                        **s+1=>  0+1          

4.二级指针,二级数组

 

1 int ar0[4];                     
2 int ar1[4];    
3 int  ar2[4]; 
4 Int **s;

 

  S+1=>(s+sizeof(int*)*1)

Ar0=>&ar[0];

&ar0要求的是数组的地址

Sizeof加数组名代表整个数组的大小,  ( sizeof(ar0)     )  

Int (*s)[4]=&ar0;把ar0给s ,   指向数组的指针

Int *p[4]   p是一个数组开批四个元素,每个元素是指针,整形指针

例:int a=10,b=20,c=30,d=40

Int *p[4]={&a,&b,&c,&d};

Int(*s)[4]   先解释指针,存放的是数组的地址,数组开辟四个元素每个元素是整形

ar0代表首元素的地址,=>&ar0[0]    ar0加1加到下一个元素(加4个字节)

&ar0数组的首地址   &ar0 加1加到下一个数组(加16个字节)

 二级指针,二级数组

S=>&ar0     *s=>*&ar0=>ar0

s指向一维数组的首地址,int型,s+1加16个字节

s+2 ar2数组的地址

*(s+2)ar2数组首元素的地址

*(s+2)+3,向下移动三位,指向ar2 第三个元素的地址   =>*(*(s+2)+3)     =>s[2][3]

 

 

 

例:int ar[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}                 二级指针,二级数组

Int cr[10];

Sizeof(cr);//40个字节

Sizeof(ar);//80

Int (*s)[10]=&cr;

Int (*s)[3][4]=&ar;

Int (*s)[4]=ar;

*(ar+2)+2 代表11 的地址

*(*(ar+2)+2 )代表11元素本身

=>*(ar[2]+2)=>ar[2][2]

4.a/=10;去掉最后一位

   a%=10;取最后一位

上一篇:21年4月23问题集(一)


下一篇:237-用二分法解决一些问题