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

C语言-指针(下)

文章目录

  • 前言   
  • 文章目录

    前言

    一、指针运算

    1.指针+-整数

    2.指针-指针

    3.指针关系运算

    二、野指针

    1.概念

    2.野指针的成因

    1.未初始化

    2.指针越界访问

    3.指针指向的空间释放

    3.避免野指针

    1.指针初始化

    2.小心指针越界

    3. 指针变量不再使用时,及时置NULL

    总结


前言

本篇文章紧接着上篇指针内容,为大家讲解C语言指针的的更多知识内容,让大家更好的了解指针,以及可以熟练使用指针来解决实际问题。


一、指针运算

1.指针+-整数

数组在内存中是连续的

 #include <stdio.h>

 int main()

{
int arr[10]={1,2,3,4,5,6,7,8,9,10};

int *p= &arr[0];      //&arr[0]==arr
int i = 0;
int j = sizeof(arr)/sizeof(arr[0]);

for(i=0; i<j; i++)

{
printf("%d",*(p+i));       //p+i 这里就是指针+整数

}     
return 0;
}

2.指针-指针

指针-指针的运算前提是两个指针指向了同一空间。

int my_strlen(char*)

{

    char* pl = p;

    while(*p != '\0')

{
    p++;

}

     return p-pl;    //指针-指针
}
int main()

{
     char arr[]= "abcdef"://数组名其实是数组首元素的地址 arr == &arr[0]

     int len = my_strlen(arr);

     printf("%d\n",len);
     return 0;

}

3.指针关系运算

 #include <stdio.h>

 int main()

{
int arr[10]={1,2,3,4,5,6,7,8,9,10};

int *p= &arr[0];     
int i = 0;
int  j = sizeof(arr)/sizeof(arr[0]);

while(p<arr+j)    //指针大小比较

{
printf("%d",*p);   

}     
return 0;
}

二、野指针

1.概念

野指针:指针指向的位置是不可知的(随机,不正确,没有明确限制的)

2.野指针的成因

1.未初始化

int main()

{
int* p;     //局部变量:局部变量不初始化时,它的值是随机值

*p = 20;

printf("%d\n",*p);
return 0;

}

2.指针越界访问

 #include <stdio.h>
 int main()
{
int arr[10]={0};

int *p = &arr[0];

int i = 0;

for(i=0; i<=11; i++)

{
*(p++)= i;
 }                    // 当指针指向的范围超出数组arr的范围时,p就是野指针
return 0;

}

3.指针指向的空间释放

#include<stdio.h>
   int* no()

{
    int n=10;

   return &n;

}
 int main()

{
      int*p = no();

     printf("%d\n”,*p);

     return 0;

}

3.避免野指针

1.指针初始化

如果明确知道指针指向哪里就直接赋值地址,如果不知道指针应该指向哪里,可以使用NULL给指针赋值。NULL 是C语言中定义的一个标识符常量,值是0,0也是地址,这个地址是无法使用的,读写该地址会报错。

#include <stdio.h>
int main()

{
int i = 10;

int*pl = &i;

int*p2 = NULL;
return 0;

}

2.小心指针越界


一个程序向内存申请了哪些空间,通过指针也就只能访问哪些空间,不能超出范围访问,超出了就是越界访问。

3. 指针变量不再使用时,及时置NULL

 指针使用之前检查有效性当指针变量指向一块区域的时候,我们可以通过指针访问该区域,后期不再使用这个指针访问空间的时候,我们可以把该指针置为NULL,因为约定俗成的一个规则就是:只要是NULL指针就不去访问,同时使用指针之前可以判断指针是否为NULL。

int main()
{  

     int arr[10]={1,2,3,4,5,6,7,8,9,10};

     int *p= &arr[0];

     for(i=0;i<10; i++)

    {
           *(p++)= i ;
    }                                        //此时p已经越界了,可以把p置为NULL
      P= NULL;                       //下次使用的时候,判断p不为ULL的时候再使用


      p=&arr[0];                     //重新让p获得地址

      if(p != NULL)                  //判断

{

}
      return 0;

}


总结

以上内容为对上篇指针进行了补充和完善,为大家讲解了C语言指针的具体操作和一些注意事项,感谢各位的耐心观看,如果以上内容对大家学习有所帮助的话,希望大家可以点赞支持一下!

相关文章:

C语言-指针(下)

文章目录 前言    文章目录 前言 一、指针运算 1.指针-整数 2.指针-指针 3.指针关系运算 二、野指针 1.概念 2.野指针的成因 1.未初始化 2.指针越界访问 3.指针指向的空间释放 3.避免野指针 1.指针初始化 2.小心指针越界 3. 指针变量不再使用时&#xff0c;及时置NULL 总结 …...

尚硅谷JavaScript高级学习笔记

01 准备 JavaScript中函数是对象。我们后续描述构造函数的内存模型时&#xff0c;会将构造函数称为构造函数对象。 02 数据类型 typeof 运算符来查看值的类型&#xff0c;它返回的是类型的字符串值 会做数据转换 03 相关问题 04数据_变量_内存 05相关问题1 06相关问题2 …...

六、长短时记忆网络语言模型(LSTM)

为了解决深度神经网络中的梯度消失问题&#xff0c;提出了一种特殊的RNN模型——长短期记忆网络&#xff08;Long Short-Term Memory networks, LSTM&#xff09;&#xff0c;能够有效的传递和表达长时间序列中的信息并且不会导致长时间前的有用信息被忽略。 长短时记忆网络原理…...

Filter过滤器+JWT令牌实现登陆验证

一、背景 我们需要在客户端访问服务器的时候给定用户一定的操作权限&#xff0c;比如没有登陆时就不能进行其他操作。如果他需要进行其他操作&#xff0c;而在这之前他没有登陆过&#xff0c;服务端则需要将该请求拦截下来&#xff0c;这就需要用到过滤器&#xff0c;过滤器可以…...

SQL学习十八~十九

...

2024 AI 辅助研发的新纪年

随着人工智能技术的持续发展与突破&#xff0c;2024年AI辅助研发正成为科技界和工业界瞩目的焦点。从医药研发到汽车设计&#xff0c;从软件开发到材料科学&#xff0c;AI正逐渐渗透到研发的各个环节&#xff0c;变革着传统的研发模式。在这一背景下&#xff0c;AI辅助研发不仅…...

【牛客】HJ87 密码强度等级 CM62 井字棋

题目一:密码强度等级 题目链接&#xff1a;密码强度等级_牛客题霸_牛客网 (nowcoder.com) 本题主要考察C语言中逻辑分支语句&#xff0c;基本语句以及对各种特殊字符 &#xff0c;ASCII值以及条件表达中的逻辑运算符关系运算符各自功能的理解&#xff0c;以及基本使用&#x…...

【论文速读】 | DeGPT:通过大语言模型优化反编译器输出

本次分享论文为&#xff1a;DeGPT: Optimizing Decompiler Output with LLM 基本信息 原文作者&#xff1a;Peiwei Hu, Ruigang Liang, Kai Chen 作者单位&#xff1a;中国科学院信息工程研究所&#xff1b;中国科学院大学网络空间安全学院 关键词&#xff1a;反向工程&…...

【DP】蓝桥杯第十三届-费用报销

#include<iostream> #include<algorithm> #include<cstring> #include<set> #include<queue> using namespace std; const int N1010; int dp[N][5010];//dp[i][j]:选到第i个物品是否能取到价值j&#xff1b; int month[13]{0,31,28,31,30,31,30…...

15. C++泛型与符号重载

【泛型编程】 若多组类型不同的数据需要使用相同的代码处理&#xff0c;在C语言中需要编写多组代码分别处理&#xff0c;这样做显然太过繁琐&#xff0c;C增加了虚拟类型&#xff0c;使用虚拟类型可以实现一组代码处理多种类型的数据。 虚拟类型是暂时不确定的数据类型&#…...

老司机都懂的!【打赏】完美运营的最新视频打赏系统

完美运营的最新视频打赏系统优于市面上95%的打赏系统&#xff0c;与其他打赏系统相比&#xff0c;功能更加强大&#xff0c;完美运营且无bug。支付会调、短链接生成、代理后台、价格设置和试看功能等均没有问题。 以上为原简介&#xff0c;经测试验证。成功搭建并可以正常进入…...

JavaWeb笔记 --- 二、Maven

二、Maven Maven概述 所有的IDE创建的Maven项目都可以使用 Maven简介 Maven模型 Maven常用命令 Maven生命周期 Maven坐标 依赖管理 dpendencies&#xff1a;依赖 依赖范围...

【C++】C++11---右值引用和移动语义

目录 1、什么是左值引用和右值引用2、左值引用与右值引用比较3、右值引用使用场景和意义4、右值引用引用左值的分析5、完美转发 1、什么是左值引用和右值引用 传统的C语法中就有引用的语法&#xff0c;而C11中新增了的右值引用语法特性&#xff0c;所以从现在开始我们之前学习…...

消息队列-kafka-消息发送流程(源码跟踪) 与消息可靠性

官方网址 源码&#xff1a;https://kafka.apache.org/downloads 快速开始&#xff1a;https://kafka.apache.org/documentation/#gettingStarted springcloud整合 发送消息流程 主线程&#xff1a;主线程只负责组织消息&#xff0c;如果是同步发送会阻塞&#xff0c;如果是异…...

机器学习笔记 计算机视觉中的测距任务常见技术路线

一、计算机视觉中的测距任务 测距是计算机视觉中的一项关键任务,涉及测量物体和相机之间的距离。这些信息可用于多种应用,包括机器人、自动驾驶汽车和增强现实。测距技术有很多种,包括主动式和被动式,每种技术都有自己的优点和局限性。主动测距技术,例如飞行时间、结构光和…...

云计算 3月8号 (wordpress的搭建)

项目wordpress 实验目的&#xff1a; 熟悉yum和编译安装操作 锻炼关联性思维&#xff0c;便于以后做项目 nginx 编译安装 1、安装源码包 [rootlinux-server ~]# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel [rootlinux-server ~]# wget http://nginx.…...

【CSS】(浮动定位)易忘知识点汇总

浮动特性 加了浮动之后的元素,会具有很多特性,需要我们掌握的. 1、浮动元素会脱离标准流(脱标&#xff1a;浮动的盒子不再保留原先的位置) 2、浮动的元素会一行内显示并且元素顶部对齐 注意&#xff1a; 浮动的元素是互相贴靠在一起的&#xff08;不会有缝隙&#xff09;&…...

Vitual Box虚拟机打开后,键盘鼠标失效

Vitual Box虚拟机打开后&#xff0c;键盘鼠标失效 作者在使用Vitual Box虚拟机软件时&#xff0c;偶然发现打开VitualBox后&#xff0c;鼠标和键盘均无法使用。 你以为是“主机热键”引起的&#xff1f;NO&#xff01; 废话少说 直接上干货&#xff1a; 在VitualBox设置下有…...

宠物空气净化器值得入手吗?选购宠物空气净化器关注哪些方面?

一开始养猫时&#xff0c;每天看着可爱的猫咪在家里快乐奔跑&#xff0c;让人心情愉悦。然而&#xff0c;作为铲屎官都知道&#xff0c;猫咪会掉毛&#xff0c;特别是在换毛期间&#xff0c;地板、沙发上都会有一大堆猫毛&#xff0c;甚至衣服也可能沾满猫毛。养猫家庭中&#…...

前端发起请求,后端模型需处理很久,怎样设置前端直接完成请求响应,后端计算完在返回结果给前端?

在这种情况下&#xff0c;可以采用异步处理的方式来解决。具体步骤如下&#xff1a; 前端发起请求&#xff1a;前端向后端发送请求&#xff0c;但是不等待后端处理完成而是立即得到响应。 后端异步处理&#xff1a;后端接收到请求后&#xff0c;不立即进行处理&#xff0c;而是…...

SAP ABAP 深度剖析:COMMIT WORK 与 ROLLBACK WORK 的异步世界与同步抉择

1. 异步与同步的数据库提交机制 在SAP ABAP开发中&#xff0c;COMMIT WORK和ROLLBACK WORK就像数据库操作的"确认键"和"撤销键"。但很多人不知道的是&#xff0c;标准的COMMIT WORK实际上是个"慢性子"——它采用的是异步更新机制。这就好比你在电…...

VoiceFixer终极指南:一键修复受损录音的AI音频救星

VoiceFixer终极指南&#xff1a;一键修复受损录音的AI音频救星 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 你是否曾为老旧录音中的噪音和失真而烦恼&#xff1f;VoiceFixer是一款开源的AI音频修复…...

数学建模小白必看:从组队到拿奖,避开这5个坑你也能成大神

数学建模竞赛避坑指南&#xff1a;从组队到获奖的实战策略 第一次参加数学建模竞赛时&#xff0c;我和两位室友组队&#xff0c;信心满满地选了最短的题目——结果三天后交了一篇连格式都没调好的论文。那次惨痛经历让我明白&#xff0c;数学建模远不止解题那么简单。本文将分…...

Docker 27在农田边缘节点落地难?揭秘高湿尘环境下的容器自愈机制与离线OTA升级全流程

第一章&#xff1a;Docker 27在农田边缘节点落地难&#xff1f;揭秘高湿尘环境下的容器自愈机制与离线OTA升级全流程农田边缘计算节点常年暴露于高湿度&#xff08;>90% RH&#xff09;、粉尘浓度超 5 mg/m 的严苛环境中&#xff0c;传统 Docker 27 守护进程易因 systemd 单…...

IC学习党必备:手把手教你配置EDA虚拟机中的工艺库(以SMIC18和TSMC180为例)

IC设计进阶指南&#xff1a;虚拟机环境下工艺库配置实战解析 在IC设计学习过程中&#xff0c;搭建完整的EDA环境只是第一步&#xff0c;真正让初学者感到困惑的往往是工艺库的配置与使用。许多学习者能够成功启动Cadence Virtuoso等工具&#xff0c;却在创建新项目时发现无法调…...

3个关键步骤:如何让PowerToys成为你的Windows效率倍增器

3个关键步骤&#xff1a;如何让PowerToys成为你的Windows效率倍增器 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 你是否曾因Windows系统操作繁琐而苦恼…...

百度网盘秒传脚本:告别文件链接失效,三步实现永久分享

百度网盘秒传脚本&#xff1a;告别文件链接失效&#xff0c;三步实现永久分享 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 你是否曾因百度网盘分享链接突…...

【紫光同创国产FPGA实战】——PDS开发环境一站式部署与避坑指南

1. 紫光同创PDS开发环境全景解读 第一次接触紫光同创FPGA开发套件时&#xff0c;我和大多数初学者一样&#xff0c;被各种专业术语和复杂的安装步骤搞得晕头转向。经过多个项目的实战积累&#xff0c;我发现其实只要掌握几个关键环节&#xff0c;就能轻松搭建起完整的开发环境。…...

用动态规划思路,一步一步实现响应式数据(从本质到落地)

用动态规划思路&#xff0c;一步一步实现响应式数据&#xff08;从本质到落地&#xff09; 文章目录用动态规划思路&#xff0c;一步一步实现响应式数据&#xff08;从本质到落地&#xff09;一、第一步&#xff1a;用动态规划逆向思维&#xff0c;拆解响应式的“最终目标”1. …...

让你的技术文档和Readme“活”起来:GitHub/GitLab Markdown表情使用指南与最佳实践

让你的技术文档和Readme“活”起来&#xff1a;GitHub/GitLab Markdown表情使用指南与最佳实践 在开源项目的世界里&#xff0c;第一印象往往决定了开发者是否会驻足深入了解你的项目。而技术文档和Readme作为项目的"门面"&#xff0c;如何让它们在众多同类项目中脱颖…...