在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。
指针是个变量,存放内存单元的地址。(存放在指针中的值都被当成地址处理)
指针是用来存放地址的,地址是唯一表示的一块地址空间
指针的大小在32位平台是4个字节,在64位平台是8个字节。
1.1、指针和指针类型
指针类型决定了指针进行解引用操作的时候,能够访问空间的大小
int* p; p能够访问4个字节
char p; p能够访问1个字节
double p; p能够访问8个字节
指针类型决定了:指针走一步走多远(指针的步长)
int p; p+1 --> 4
char* p; p+1 -->1
double* p; p+1 --> 8
1.2、野指针
概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
1、指针未初始化:int* p; //随机指向内存中的一块地址
2、指针越界异常
3、指针指向的空间释放
如何规避野指针?
1、指针初始化
2、小心指针越界
3、指针指向空间释放,即使置NULL
4、指针使用之前检查有效性
1.3、指针运算
指针±整数:地址偏移
指针-指针:指针之间的元素个数
注:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。
1.4、指针和数组
&数组名-数组名不是首元素地址-数组名表示整个数组-&数组名 取出的是整个数组的地址
sizeof(arr),sizeof(数组名)-数组名表示的整个数组-sizeof(数组名)计算的是整个数组的大小