1.指针是什么
将一块内存划分成若干大小相等的区域(内存单元),给每个内存单元赋予一个编号(地址),便于查找
对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的时候产生高电平或低电平(对应0和1)
那么32跟地址线产生的地址就有 2^32 次方个,每个地址标识一个字节,那我们就能对4GB的空间进行编址,
在32位机器上,地址是由32个0或1组成的二进制序列(32bit位),需要四个字节的空间来储存,因此一个指针变量的大小为4个字节。
64位机器上则为8个字节。
2.指针类型的意义
指针变量的大小与其类型无关
F10-调试-窗口-内存
造成区别的原因
指针类型决定了指针解引用操作的权限
造成区别的原因
int类型指针加1,跳过sizeof(int)即4个字节,char类型指针加1,跳过sizeof(char)即1个字节。
合理的运用指针类型有助于控制用指针访问时想要跳过字节的个数
一个16进制数 转换为 4个二进制位,4个二进制位 就能表示 一个16进制数字。
因此a的大小为32个bit位,即4个字节。
3.野指针
3.1野指针出现的原因
局部变量不初始化
越界访问
指针指向的空间被释放
出函数的时候函数的空间就被释放了
3.2如何规避野指针
后面使用的时候再赋值
4.指针运算
4.1指针+-整数
编译器编译arr[i]会将其转换为能够识别的*(p+1),因此这两种写法表达是相同的
4.2指针-指针(相减)
指针 减 指针 得到的 数的绝对值 是 指针 和 指针 之间的 元素个数。
指针和指针之间进行运算的前提是两个指针都指向同一块空间(即在一个数组中)
用指针-指针实现求字符串长度的函数my_strlen()函数
4.3指针的关系运算(比较大小)