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;取最后一位