指针背记知识点--
一,指针是什么?
·指针是编程语言中的一个对象,利用地址,它的值指向存在电脑储存器中另一个地方的值。
·指针就是变量,用来存放地址的变量。(存放在指针中的值都被当作地址处理)
·指针的大小在32位平台上是4个字节,在64位平台上是8个字节
·一个单元的大小位1字节
·32位机器,假设有32根地址线,那么假设每根地址线在寻址是产生一个电信号正电/负电(1或0) 那么32根地址线产生的地址就会是2的32次方个地址。
·问题1:关于为什么指针在32位上占4个字节,在64位上占8个字节:
首先指针对应地址,假设1个指针对应1个地址,32位平台上有2的32次方个地址,一个地址是32个2进制位,一个字节占8个2进制位,所以指针的大小在32位系统上为4字节,64位系统上位8字节。
二,指针和指针类型:
·指针类型决定了指针进行解引用操作的时候,能够访问空间的大小。
·指针的类型决定了,对指针解引用的时候有多大权限(能操作几个字节)
·Int* p;*p能够访问4个字节 char* p; *p能够访问1个字节
·指针类型决定了:指针走一步走多远(指针的步长)
·指针的类型决定了指针向前或者向后走一步有多大(距离)
三,野指针
·概念:野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)
1,指针未初始化
2,指针越界访问
3,指针指向的空间释放
·如何规避野指针
1,指针初始化 2,小心指针越界
2,指针指向空间释放即使置NULL 4,指针使用之前检查有效性
四,指针运算
·指针+ - 整数
加减的是数据类型的大小(内存),不是逻辑上的加减
(后置++,先使用完再++)
·指针 - 指针(当用指针减指针,一定要在同一块空间里。)
在同一块连续的空间,相减的绝对值==距离*数据类型所占空间大小(单位字节)
·指针的关系运算
标准规定: 允许指向数组元素与指向最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。
四,指针和数组
·通常来说数组名是首元素地址
·列外:
1,&数组名-数组名不是首元素地址-数组名表示整个数组--&数组名取出的是整个数组的地址
2,sizeof(数组名)--数组名表示的整个数组--sizeof(数组名)计算的是整个数组的大小
·二级指针: A(即B的地址)是指向指针的指针,称为二级指针,用于存放二级指针的变量称为二级指针变量.根据B的不同情况,二级指针又分为指向指针变量的指针和指向数组的指针。
·指针数组:存放指针的数组
后续不断更新中.....