想知道什么是指针先要知道什么是地址,数据一般存储在内存中。
内存地址就像是房间,数据就是寄存在里的人
每个房间1 字节
int 4 {首地址}{}{}{} 4个房间 1.列举所有房间号 2.首房间,房间数
存储空间大小
记录一个数据对象在内存中的存储位置须知:数据对象的首地址,数据对象的存储空间大小
指针数据类型
& 取地址符,获取数据对象的首地址和所需存储空间大小
int n;
类型 pn = &n; 这是什么类型呢?这个类型就是指针类型
目标数据类型 * 变量名。
因此我们可以这么写
int *pn =&n
意义:保存变量n首地址和所需空间大小
常用的声明方法例如下代码
int ol =10;
int *pa = NULL;//空指针
int *po,*pb,*pc;//定义方法
int *pq;//野指针
pq = &ol;//int 指针变量指向int类型变量
void *pi;//万能指针啥都能干,指针无论干什么32位4字节 64wei 8字节
指针类型是通过值来保存目标数据对象的首地址
通过类型本身来标记目标数据对象的空间大小
使用指针
* 是取值运算符
根据首地址和空间大小找到目标数据对象
指针中常用的等价代换:
int ol;
int *pq;
pq = &ol
*&pq =pq =&ol;
&*pq = &ol = pq;
强制类型转换
int n = 123;
int*pn = &n;
char*pc = (char *)pn;
指针的运算
指针类型的值是整数,那么它能否用来运算?
int a = 100;
int *pb;
pb = &a;
short b = 25;
short *pc;
pc = &b;
long d = 55;
long *pd ;
pd = &d;
float e =99.5;
float *ef;
ef = &e;
printf("%p\n",++pa);
printf("%p\n",++pb);
printf("%p\n",++pc) ;
printf("%p\n",++pd) ;
printf("%p",++ef);
指针++与数据类型有关
规律 1.sizeof(目标数据对象)被称为步长
2.指针类型加n后,其首地址向后移动n*步长个字节
3.指针类型减n后,其首地址向前移动n*步长个字节
应用指针类型加减
int a = 550;
int b = 260;
int *pa;
int *pb;
pa = &a;
pb =&b;
printf("%d\n",*pa+*pb);//指针运算以其所指值进行运算
printf("%d\n",*pa-*pb);
注意 *p-1 与 *(p-1)是不同的