:指针就是地址,表示的是每个字节的编号。
指针变量:指针变量是用来存储指针。
指针的格式:存储类型 数据类型 *指针变量名(* 是指针说明符号,说明这是一个指针)
存储类型:auto static volatile const extern regist
(1)auto:自动类型变量
1:局部变量默认存储类型是 auto
2:全局变量的存储类型不允许使用auto 修饰
3:auto存储的变量默认在栈区
4 auto 修饰局部变量会默认初始化为 0
(2)static
1作用:作用于静态变量,延长局部变量的生命周期。延长的是局部变量的生命周期至整个文件,但作用域没有发生改变
2修饰函数时:把文件的生命周期延长至文件结束,但是不可以跨文件调用
3使用static修饰的指针不允许指向auto 类型变量的地址。
(3)volatile :防止内存优化,保持内存的可见性。
(4)const
const:作用:修饰的值不可以改变
const修饰的全局变量内存在静态区的只读段,只可以读取,不能发生改变
const 修饰的局部变量内存在栈区
const和指针的结合
看const和指针说明符*还有指针的相对位置
看const 后面的是*p还是p或者只是*,后面是*P,则值可以改变,仅仅是p那么地址可以改变
const char *p 值不可以改变,地址不可以改变
char const *p 值不可以改变,地址可变
char* const p 地址不可以改变,值可以改变
const char * const p 第一个const修饰*,则是不可改变,第二个const修饰p,地址不可以改变
char const *const p 第一个const修饰值,第二个const修饰值得地址,地址和值均不可修改
(5)extern:引用外部变量
1全局变量和函数默认存储类型是extern
2extern类型的变量默认内存存储在静态区
3extern不可以引用static修饰的变量
(6)
register
寄存器变量:寄存器类型的变量不可以取地址操作
《二》
指针的字节大小只和操作系统有关,64位系统都是8字节,32位系统都是4字节。
野指针:未进行初始化的指针,指针指向不明确,非法访问内存。轻则段错误,重则计算机紊乱,甚至死机。
空指针: 指针指向0,用来指针指向不明确时指向。避免出现野指针
int *p=NULL;写成int *p=0;可能会出现错误
* 解引用:取地址所对应的值
& 取地址
指针的偏移 注意 ++*p *和++运算等级相同,从右往左运算,先取值在自增
*p++ 先对P记性++,但++后缀运算,先取值,再对P自增,向地址高位偏移一个数据类型字节大小