1.指针的概述
int a=123456789;
char * pch=(char *)&a;
short * ps=(short *)&a;
unsigned short *ups=(unsigned short *)&a;
int *pi=&a;
printf("%d\n",*pch);
printf("%d\n",*ps);
printf("%d\n",*ups);
printf("%d\n",*pi);
输出结果:
21
-13035
52501
123456789
(1)指针有"两个值":
指针本身也就是所指对象的地址值&a(一个地址),指针本身也是一个变量,指针所指的对象a,通常用*加指针变量来找到所指的值。
如果把指针pi比作一个房间,a就是房间里面我们想要找的人,这个时候*相当于钥匙,*pi来打开这扇门,找到a,同样用&来找到a的地址,也就是pi。
(2)指针本身来还具有一些其他属性:
指针的类型和指针所指向的类型,指针的类型必须要和所指向的类型对应一致。例如int*只能指向int型数据(可以强制转换)。
int a=123456789,char *pch想要指向a就必须将a的类型强制转换为char,short同理。
而我们知道指针pch是存储a的地址,&a已经取得了a的地址,所以&a强转为char *直接就和pch对应了(pch指向a,pch的值是&a)。下面ps同理。
(3)指针所对应的内存区域
指针虽然只存储一个地址,但是他的类型规定了为该地址划分多少连续空间,所以指