当前位置: 首页 > 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.xdnf.cn/news/1371709.html

相关文章:

  • 小范围疫情防控元胞自动机模拟matlab
  • 用 Allure 生成 pytest 测试报告:从安装到使用全流程
  • 【项目】深房数据通——深圳房价可视化系统
  • 数字时代下的智能信息传播引擎
  • Python大型数组计算完全指南:从基础到分布式系统实践
  • 简明 | ResNet特点、残差模块、残差映射理解摘要
  • Cherry-pick冲突与Git回滚
  • Nginx Ubuntu vs CentOS 常用命令对照表---详解笔记
  • 手机移动代理IP:使用、配置、维护的10问10答
  • 数据集数量与神经网络参数关系分析
  • 如果 我退休了
  • 身份管理与安全 (Protect identities)
  • Firefox Relay 体验
  • Java大厂面试实战:从Spring Boot到微服务架构的全链路技术解析
  • RCC_APB2PeriphClockCmd
  • GaussDB 数据库架构师修炼(十八) SQL引擎-计划管理-SPM
  • 18、移动应用系统分析与设计
  • 机器人 - 无人机基础(6) - 状态估计(ing)
  • 余承东:鸿蒙智行累计交付突破90万辆
  • 算法-每日一题(DAY15)用队列实现栈
  • 算法练习——26.删除有序数组中的重复项(golang)
  • Swift 解法详解 LeetCode 363:矩形区域不超过 K 的最大数值和
  • Spring Bean 生命周期高阶用法:从回调到框架级扩展
  • Java基础第5天总结(final关键字,枚举,抽象类)
  • CVPR自适应卷积的高效实现:小核大感受野提升复杂场景下图像重建精度
  • vue新增用户密码框自动将当前用户的密码自动填充的问题
  • 高校党建系统设计与实现(代码+数据库+LW)
  • 嵌入式配置数据序列化:自定义 TLV vs nanopb
  • 深度学习篇---LeNet-5
  • 1Panel命令