外贸网站海外推广,天津最新消息今天,全景网互动平台,温州网站建设怎么样目录
一、什么是指针
二、指针和指针类型
三、野指针
1.野指针的成因#xff1a;
2.如何规避野指针
四、指针运算
1.指针-整数
2. 指针之间的加减
五、二级指针
六、指针数组 一个男人#xff0c;到底要走多少的路#xff0c;才能成为一个真正的男人
本专栏适用于…
目录
一、什么是指针
二、指针和指针类型
三、野指针
1.野指针的成因
2.如何规避野指针
四、指针运算
1.指针-整数
2. 指针之间的加减
五、二级指针
六、指针数组 一个男人到底要走多少的路才能成为一个真正的男人
本专栏适用于有一定C语言基础并且还要继续学习的人
往期回顾
C语言函数详解
C语言操作符详解
C语言实现扫雷及进阶
C语言实现三子棋
C语言实现猜数字游戏
C语言for循环详解
C语言初学可能会遇到的问题一
文章质量在努力提高中...
指针是C语言的精髓用好它将能真正发挥C语言的强大功能。博主已经将指针的基础用法为大家准备好并富有大量图解有需要学习的朋友可以收藏保存也欢迎大家与博主讨论后续将会推出C语言指针的进阶内容。
一、什么是指针
指针是内存中一个最小单元的编号也就是地址。
通常口语中的指针通常指的是指针变量是用来存放内存地址的变量。
每一个变量的创建,编译器都会给它分配一块空间来存储而变量在这些空间中以二进制补码的形式存储不了解补码的可以去看C语言操作符详解中有详细介绍。每一块内存空间都有对应的地址编号这些地址在内存中是连续的像门牌号一样指针就相当于日常生活中的门牌号通过某人的门牌号就可以找到这个人。同样拿到了指向某个变量的指针就可以通过解引用找到这个变量然后对这个变量进行操作。 那么如何将地址指针存入指针变量中呢 a为int型占四个字节a是将a的第一个字节的地址存放在指针变量p中。
指针的大小在32位平台是4个字节在64位平台上是8个字节
二、指针和指针类型
指针类型的意义决定了p指向的对象类型p解引用时可以访问的对象的字节数决定了指针/-整数操作时的步长。
1指针指向的数据为啥类型一般就将指针类型定义为啥类型比如指针要指向一个整形变量就将这个指针定义为int*
2解引用时可以访问的对象的字节数如果有特殊要求的话可以修改指针类型为与自己解引用时想访问的字节数相等的数据类型
例如在解引用时想访问1个字节的内容即可将指针类型定义为char*类型在解引用时想访问4个字节的内容即可将指针类型定义为int*
3指针加减整数时的步长指针加1跳过的字节数 三、野指针
野狗就是没有主人的狗大多数只是个例子那么野指针就是指针指向的位置是不可知的随机的不正确的没有明确限制的
野指针是很‘危险’的容易造成内存的非法访问。
1.野指针的成因
1 指针未初始化
未初始化是指定义指针的时候没有规定它指向的位置如下面的指针p,那它现在就是一个野指针
2指针越界访问
#include stdio.h
int main()
{int arr[10] {0};int *p arr;int i 0;for(i0; i11; i){//当指针指向的范围超出数组arr的范围时p就是野指针*(p) i;}return 0;
}当i11时循环继续执行指针p访问的范围已经超过来了数组arr的范围因为数组外的值是未知的而可以通过解引用p访问到数组外所以当这次循环执行后p就成了野指针。
3指针指向的空间释放
2.如何规避野指针
1指针初始化
如果在定义指针时不知道指针应该指向哪里可以先初始化为空指针 int*pNULL;初始化为空指针后在后面使用这个指针时即可直接修改指针要指向的对象
2小心指针越界
用指针对数组进行操作时要防止指针指向数组外的空间指针所指对象超出数组范围后这个指针就会变成野指针变得不可控
3指针指向空间释放及时置NULL
比如当调用函数结束后函数里面的局部变量会销毁如果有指向这个局部变量的指针那么这个指针就会变成野指针,当这个变量的空间释放后及时将指针改为空指针
5避免返回局部变量的地址 指针p所指向的是test函数的返回值为局部变量a的地址但这个值所占用的空间已经在函数调用结束后还给了操作系统所以再通过解引用指针p去访问这个变量就是非法的即使如图解引用后可以访问的到也是不允许的
6指针使用之前检查有效性 在每次使用指针时要先判断这个指针是不是空指针不是空指针才能对这个指针进行操作
四、指针运算 1.指针-整数
指针在-整数时向前/向后跳过指针对应的字节数一般情况下在数组中进行指针-整数的情况会多一些因为数组中的元素是连续存放的且每一个元素的数据类型都相同所以指针加1再解引用就可以访问到下一个元素指针减1在解引用也可以访问到上一个数组元素
这段代码可以清晰地看出数组与指针之间的关系 2. 指针之间的加减
指针减指针得到两个指针之间的元素个数 p指向数组首元素q指向数组最后一个元素他们之间有9个元素因此q-p9
指针加指针没有实际意义
五、二级指针
二级指针指向的对象是指针 *p可以找到a,那么**q也能找到a,先对*q找到p,再对p解引用找到a,即 *(*q)简写为**q
六、指针数组
真正的男人主语是男人。那么指针数组主语也就是数组存放指针的数组 指针数组就是存放指针的数组即数组的每一个元素都是指针地址 将指针数组与二级指针结合起来 本文收录于水火莲花-C疑难专题 C语言学习专题
这两个专题可用于正在学习C语言并且有一定基础的人专栏持续免费更新中...