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. 指针变量不再使用时,及时置NULL 总结 …...

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

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

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

SQL学习十八~十九
...

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

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

【论文速读】 | DeGPT:通过大语言模型优化反编译器输出
本次分享论文为:DeGPT: Optimizing Decompiler Output with LLM 基本信息 原文作者:Peiwei Hu, Ruigang Liang, Kai Chen 作者单位:中国科学院信息工程研究所;中国科学院大学网络空间安全学院 关键词:反向工程&…...

【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; int month[13]{0,31,28,31,30,31,30…...

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

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

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

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

消息队列-kafka-消息发送流程(源码跟踪) 与消息可靠性
官方网址 源码:https://kafka.apache.org/downloads 快速开始:https://kafka.apache.org/documentation/#gettingStarted springcloud整合 发送消息流程 主线程:主线程只负责组织消息,如果是同步发送会阻塞,如果是异…...

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

云计算 3月8号 (wordpress的搭建)
项目wordpress 实验目的: 熟悉yum和编译安装操作 锻炼关联性思维,便于以后做项目 nginx 编译安装 1、安装源码包 [rootlinux-server ~]# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel [rootlinux-server ~]# wget http://nginx.…...

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

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

宠物空气净化器值得入手吗?选购宠物空气净化器关注哪些方面?
一开始养猫时,每天看着可爱的猫咪在家里快乐奔跑,让人心情愉悦。然而,作为铲屎官都知道,猫咪会掉毛,特别是在换毛期间,地板、沙发上都会有一大堆猫毛,甚至衣服也可能沾满猫毛。养猫家庭中&#…...

前端发起请求,后端模型需处理很久,怎样设置前端直接完成请求响应,后端计算完在返回结果给前端?
在这种情况下,可以采用异步处理的方式来解决。具体步骤如下: 前端发起请求:前端向后端发送请求,但是不等待后端处理完成而是立即得到响应。 后端异步处理:后端接收到请求后,不立即进行处理,而是…...

DDD领域驱动设计
一、什么是领域驱动设计DDD 领域驱动设计(Domain-Driven Design,DDD)是一种软件开发方法论,它提出了一组关于如何设计和构建软件系统的原则和方法。 二、DDD的诞生是为了解决哪些问题 对复杂业务领域的理解不足:传统…...

网络编程第1天
OSI的七层网络模型有哪些,每一层有什么作用? (1)应用层 负责处理不同应用程序之间的通信,需要满足提供的协议,确保数据发送方和接收方的正确 应用层提供的协议: HTTP:超文本传输…...

Springboot--整合Logback 日志框架(Maven)
文章目录 前言一、Logback 日志框架介绍:二、整合:2.1 引入jar2.2 logback.xml 文件配置:2.3 日志输出:2.3.1 方式一:2.3.2 方式二: 2.3 日志输出结果展示: 三、扩展:3.1 日志输出格…...

【考研数学】李林《880》vs 李永乐《660》完美使用搭配
没有说谁一定好,只有适不适合自身情况,针对自身弱点选择性价比才最高。 两者侧重点不同,660适合强化前期,弥补基础的不足,880适合强化后期,题型全面,提高我们对综合运用知识的能力。 选择习题…...

Java面试之消息中间件
消息队列 优缺点 特点 解耦异步削峰缺点 系统可用性降低 兜底:代码中try、catch 异常捕捉后直接进行数据库操作,或者 搭建高可用集群,Kafka集群、RocketMQ集群提高复杂度 消息重复(消费端的幂等性设计)、消息丢失(主要集中RabbitMQ)、消息的顺序(业务:1,下单 2,支付 3,发…...

网工学习 DHCP配置-接口模式
网工学习 DHCP配置-接口模式 学习DHCP总是看到,接口模式、全局模式、中继模式。理解起来也不困难,但是自己动手操作起来全是问号。跟着老师视频配置啥问题没有,自己组建网络环境配置就是不通,悲催。今天总结一下我学习接口模式的…...

【GO】语言特点 | Go和Java的对比
while循环 go语言中没有while循环,一般都是用for循环替代 while (条件) {} // Java的for循环for true {} // go 语言中会用一个为真的表达式作为是否 会进入循环的条件,也就是把其他语言的for和while合并了for循环 for (Type item : list) {} // j…...

USB2.0设备检测过程信号分析
1.简介 USB设备接入的Hub端口负责检测USB2.0设备是否存在和确定USB2.0设备的速度。检测设备是否存在和确定设备速度涉及一系列的信号交互,下面将分析该过程。 2.硬件 USB低速设备和全速/高速设备的连接器在硬件结构上有所不同,而主机或者Hub接收端连接…...

Go语言物联网开发安科瑞ADW300/4G电能表数据上传mqtt平台-电表接线到传输数据完整流程
电能表功能说明 ADW300是方便用户进行用电监测、集抄和管理,可灵活安装在配电箱中,可用于电力运维、环保监管等在线监测类平台中。我们本案例是用于工业售电公司对出售电的管理,设备可以监控用电情况、故障监控及警报,售电公司可…...

LabVIEW质谱仪开发与升级
LabVIEW质谱仪开发与升级 随着科技的发展和实验要求的提高,传统基于VB的质谱仪系统已经无法满足当前的高精度和高效率需求。这些系统通常存在着功能不全和操作复杂的问题,影响了科研和生产的进度。为了解决这些问题,开发了一套基于LabVIEW开…...