8、不同的指针指向:
指针的类型决定了指针的操作原则,short*指针 一次操作2字节空间,char*指针一次操作1字节空间,int*指针一次操作4字节空间,float*一次操作4字节空间,double*针一次操作8字节空间。。。。。。并且浮点数储存与整型储存是不一样的,int*与float*也是完全不一样的。
int a=12;
char *pc=&a; *p=2,只操作1字节首字节。
longlong *pll=&a; *pll=34,操作8字节,4字节越界。
float *pf=&a; 读出的*pf与12无关系。
9、二级指针:
int =12; a变量有自己的空间,假设地址是0x10,里面装的是12.
int*=&a; p变量有自己的空间,假设地址是0x20,里面装的是0x10.
int**pp=&p; pp也有自己的空间,假设地址是0x30,里面装的是0x20.
注意:
pp就是二级指针变量,用来装一级指针变量的地址。
int**就是二级指针类型,int*是一级指针类型。
同理:int***是三级指针,装二级指针的地址,&pp。
int****是四级指针,装三级指针的地址。
二级指针的使用:
计算规则:*+空间的地址 就是该 空间名字。
*+变量的地址 就是该 变量本身。
p==&a
*p==*&a==a
pp==&p
*pp==*&p==p
**pp==*p==a
可得:**pp与a等值。
读:printf ** pp,输出12
写:**pp=34,原12被覆盖,a也是34.
取地址:&**pp==&a 得到该空间的地址。
10、指针数组:
int a[10]; 每个元素都是int类型数据。
int* c[10]; 每个元素都是int*类型的,即地址。
指针数组,也叫地址数组。
int d=1,e=2,f=3
int*c[5]={&d,&e,&f};
使用:
c[1]就是&e
*c[1]==*&e==e
*c[1]的用法与e相同。
读:printf *c[1],输出2.
写:*c[1]=34,原2被覆盖,e=34。
取地址:&*c[1]=&e,得到该空间的地址。