当前位置: 首页 > news >正文

C语言初阶(10)

1.野指针

野指针就是指向未知空间的指针,有以下几种情况

(1)指针未初始化

int main()
{int a=0;int*b;return 0;
}

上面指针就是没有初始化,形成一种指向一个随机空间的地址的指针,我们可以修改成

int main()
{int a=0;int*b=NULL;return 0;
}

(2)数组越界访问

数组下标超过数组本身下标时就会造成形成野指针

int main()
{int a[10]={0};int *b=arr+10;return 0;
}

上面b就是野指针,野指针指向数组后未知的数据

(3)局部变量的指针 

 非主函数局部变量的地址存在主函数指针中就会形成野指针,由于指针指向的空间是有可能被销毁和未知,和不属于程序还给操作系统,如下例

 上面就说明野指针的危害

总结:野指针种类有许多,只要不确定和不受我们掌控的指针我们就可以归类成野指针。

我们应该做到以下几点来避免野指针

1. 指针初始化 2. 小心指针越界 3. 指针指向空间释放即使置NULL 4. 避免返回局部变量的地址 5. 指针使用之前检查有效性

2.指针的运算

指针的加1或者减1都是将根据指针的不同权限将指针后移1个或多个地址

指针之间的减法是计算同种数据类型(也就是有相同权限)的之间的元素个数,结果的绝对值就是元素个数,所以我们就可以简化求字符串长度的函数

指针之间的加法没有意义

指针之间的逻辑运算

 指针之间的> < => =<都是有意义,指针在数组中的指针是由大到小的。我们要注意的是在C语言的标准中指针的比较要求和数组前面的进行比较,而不是和后面进行比较。

 

3.数组和指针

数组中存放的相同类型的数据,指针变量存放的是所指向的地址,我们就可以将指针存放在数组中,形成指针数组,例如

int main()
{int a=0;int c=0;int *b[2]={&a,&c};}

我们可以通过访问数组的形式来进行访问指针对应的空间。 

 我们还可以通过这样的形式建立二维数组并打印

数组名的是首元素的指针,这就是数组和指针之间的联系 

数组在访问时arr[1]相当于*(arr+1)的形式,二者时等价于。

4.二级指针

二级指针是存储一级指针的地址的变量,格式是

int main()
{int a=1;int*b=&a;int**c=&b;}

int*代表了二级指针的指向的空间的数据类型 ,*代表存放的是指针

同样的我们可以将二级指针指向一级指针,然后再获取一级指针的内容。

 

http://www.lryc.cn/news/413550.html

相关文章:

  • Javaweb用过滤器写防跳墙功能和退出登录
  • 小试牛刀-Telebot区块链游戏机器人(TS升级)
  • MySQL:Prepared Statement 预处理语句
  • Java:Thread类以及线程状态
  • 如何通过前端表格控件实现自动化报表?
  • Upload-labs靶场Pass01-Pass21全解
  • 使用openpyxl库对Excel数据有效性验证
  • 【算法】浅析深度优先搜索算法
  • 鸿蒙系统开发【ASN.1密文转换】安全
  • 【期末复习】软件质量保证与测试
  • CTFHub——XSS——反射型
  • docker 部署 libreoffice
  • 预测各种开发语言的市场占比
  • mybatisplus 通用字段自动赋值与更新
  • 图像生成中图像质量评估指标—FID介绍
  • uniapp全局分享功能实现方法(依赖小程序右上角的分享按钮)
  • Redis中BigKey的判定查找建议
  • Swift-语法基础
  • 面向对象进阶:多态、内部类、常用API
  • 寸(英寸)、码、斤、公顷等日常中大概的换算单位你清楚吗
  • Python面试宝典第26题:最长公共子序列
  • 接口测试学习笔记2
  • vue3修改带小数点的价格数字:小数点的前后数字,要分别显示成不同颜色和大小!已经封装成组件了!
  • JVM(Java虚拟机) - JVM内存分配与内存管理
  • Linux中vim的基本介绍和使用
  • 宝塔面板上,安装rabbitmq
  • 【Docker系列】Docker 镜像管理:删除无标签镜像的技巧
  • 数据采集器
  • 小红书0510笔试-编程题
  • 2024年热门开放式耳机评测!悠律、韶音、声阔到底该选谁?