指针
指针的定义
用来存放内存单元地址,内存单元地址唯一标识一块内存空间
指针定义方式:数据类型 *变量名;
1 | int main() |
结论:
1、指针就是变量在内存中单元中的地址值;
2、地址值是整数值;
3、一般用“%p”的格式,以十六进制显示。
1 |
|
指针的大小
指针存放地址,所以指针的大小直接取决于地址的大小,即与机器字长有关,与地址空间中存放的数据类型无关。
| 机器平台 | 指针大小 |
|---|---|
| 32位机器 | 地址是32位组成二进制序列,用4个字节的空间来存储,所以指针变量的大小就是4个字节 |
| 64位机器 | 地址是64位组成二进制序列,用8个字节的空间来存储,所以指针变量的大小就是8个字节 |
指针操作
指针解引用*
通过指针访问所指向内存中存储的变量(或数据)
1 | int arr[] ={10,20,30,40}; |
注意与乘号进行区别使用(乘号是双目运算符,乘号两边必须有两个操作数)
1 | int *ptr; 与 int *ptr; 与 int *ptr; 都是用来定义一个prt指针变量的;功能完全相同。 |
“+-整数”操作
代表指针地址在内存中加减一定数量的元素单元,也就是指针指向的元素发生了变化
1 | int arr[] ={10,20,30,40}; |
指针的类型决定了指针向前(+整数)或者向后(-整数)走一步有多大(距离)
野指针
指未初始化的指针,或者指向不合法地址的指针
1 | int *ptr; |
| 指针未初始化 | 未初始化的指针,当前就是野指针 |
|---|---|
| 指针超过作用域 | 当一个指针超出了它所在的作用域,指针指向的内存是非法的或者已经被释放的 |
| 指针被释放后未置空 | 涉及到动态内存分配和释放 |
如何规避野指针:
1、指针初始化
2、 小心指针越界
3、指针指向空间释放即置为空NULL
1 |
|
1 |
|
指针运算
指针相减运算
计算两个指针之间相差的偏移量(步数)或元素个数偏移量表示两个指针所指向内存地址之间的距离(即相差多少元素)
1 | int arr[] ={10,20,30,40}; |
注意:指针相减运算只有在指针指向同一数组时才有意义
指针关系运算
基于指针所指向的内存地址进行比较
可以使用关系运算符(<、>、<=、>=、==、!=)来比较指针,反映指针所指向地址的前后关系
1 | int arr[] ={40,30,20,10}; |
注意:指针关系运算只有在指针指向同一数组元素时才有意义
指针与数组
1 |
|
1 |
|
指针数组
1 |
|
数组指针
1 |
|
指针与函数
指针函数
函数的返回值类型是指针类型,即函数返回一个地址,这样的函数是指针函数
1 |
|
函数指针
指针指向一个函数,函数的地址保存到一个指针中,此指针就是函数指针。
1 |
|
main函数的参数
1 |
|
const
修饰的变量不能再被修改
1 |
|
二级指针
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Ethaniel!
评论





