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

C语音初阶————指针2

8月25日学习总结:

        学习内容主要围绕野指针开展,主要分为三个部分介绍野指针:

(1)野指针的概念:野指针就是指针指向的位置是不可知的。(随机的,不正确的,没有明确限制的)
(2)野指针的类型:
①未初始化,意味着没有明确指向(非法访问),当一个局部变量不初始化的话,默认赋值随机值。

int main()
{int* p;*p = 100; //该指针为野指针,非法访问return 0;
}

②指针越界访问:当指针的范围超过界限该指针为野指针。

int main()
{int arr[10] = { 0 };int* p = arr;int i = 0;for (i = 0; i <= 10; i++){//当i=10时指针p越界了,该指针为野指针*p = 1;p++; //相当于 *p++=1;//(*p)++和*p++的区别:前者是*p的值++,后者为p++后取地址}return 0;
}

③指针指向的空间释放:子函数中的局部变量在出函数的时候就销毁(将地址归还给内存,当该地址不使用内容暂时不改变),该指针变量为野指针。

int* test()
{int a = 10;return &a;
}
int main()
{int* p = test();//局部变量销毁,内存归还给内存,但当地址不使用内容不变return 0;
}

(3)如何避免野指针出现?
养成良好的习惯:
①指针初始化,当不知道赋何值时为空指针,默认空指针为NULL
②小心指针越界
③避免返回局部变量的地址
④指针使用之前坚持有效性

int* test()
{int a = 10;return &a;
}
int main()
{int* p = NULL;// p = 100; //对空指针进行赋值会报警告,很大可能会赋值失败int* pt = test();//printf("haha\n");//printf("hello\n");//打印一个或者两个后面的*pt的值不同;if (pt != NULL){printf("%d\n", *pt);//当在函数调用后没有打印任何东西该值依旧为10,否则为随机值}return 0;
}

http://www.dtcms.com/a/351616.html

相关文章:

  • .NET 6.0 日志处理之Serilog 写入到sql server(一)
  • OOM问题排查思路及解决方案
  • 【Notepad++免费版下载安装教程(附安装包)2025最新整理】
  • 如何用Wireshark捕获当前房间路由器和主机的数据包
  • iOS 26 正式版即将发布,Flutter 完成全新 devicectl + lldb 的 Debug JIT 运行支持
  • 剖析graph-rag中最核心的一步:切片文本如何输入到大模型并且构建整体的关系
  • 食用油平台:油香里的生活哲学课
  • 使用 Vue 3 <script setup> 语法实现基于 token 的登录功能
  • 100种交易系统(4)顺势回调开仓
  • android多线程与线程间通信
  • python-多线程(笔记)(持续更新)
  • 基于dify+ollama+bge组合搭建本地知识库
  • 10分钟快速搭建 SkyWalking 服务
  • 【Apache MXNet】
  • Med-SA 论文总结
  • Apache Shiro基本使用指南
  • 基于SpringBoot的社团管理系统【2026最新】
  • 《C++ Primer 第五版》initializer_list 涉及到的范围 for 循环(range-based for) 的语义差别
  • 车载铁框矫平机:把“钣金诊所”开到工地上
  • 【软考论文】论原型开发方法及其应用
  • Ubuntu 24.04 LTS 桌面版安装问题记录
  • 2025年8月27日,七月初五,生活指南
  • Python包管理与安装机制详解
  • pytorch-利用letnet5框架深度学习手写数字识别
  • 漫谈《数字图像处理》之霍夫变换发展历程与演进脉络
  • 类似ant design和element ui的八大Vue的UI框架详解优雅草卓伊凡
  • (vue)el-progress左侧添加标签/名称
  • C++学习(4)模板与STL
  • 虚幻5引擎:我们是在创造世界,还是重新发现世界?
  • 8.26 review