指针是内存单元的物理地址
记地址低的数
低位存储在地址低的位置
0-2的16次方-1编指范围
地址数据 地址类型
32位4个字节
int *a;double *a;char *a;
地址数据运算不同
a+1 下一个单元的首地址
int a
int *p
p=&a
*p=23
int *p[ ] //指针数组
int *p,q //*只修饰p,不修饰q
int **p //指向指针的指针变量
内存容量是2^32,即0-2^32-1是编址范围
地址数据归类于地址集合
同一个集合中数据占用内存单元的大小一致
int* char* double* 均为四个字节32位
&:取内存单元的地址符,单目
参加其运算的必须是内存单元
int a int*p
&a &p均选择其最小的地址
其只能进行地址类运算
int *a;int b;
a=&b;*a=23(*运算正数第二,a不参加赋值运算);printf("%d",b);
*+指针类运算
地址的加法运算
+:&a+1中1是一个整形单元的长度
对于int,char,double长度不同
指针运算(单目)
* :*p的p是指针变量,若p不是指针变量则报错
p是内存单元,存地址(指针)
*&p是正确写法
*p的结果是内存,代表一个地址
int a
int*p/char*p
*p=a
第一个是指4个字节,第二个指向1个字节
一个字节最大代表255,第二个会导致a中数值的覆盖
访问字节数从低位开始,不论越界还是缺位,只读取type类型的字节数