C语言复习第5章 操作符

news2024/10/22 23:43:19

目录

  • 关于++和*的优先级问题
  • 进一步理解*(p++)和*(++p)

关于++和*的优先级问题

首先明确一点 解引用*的优先级比自增++低
在这里插入图片描述

区分如下代码:

1.*p++:等价于*(p++) 先对指针p解引用 再把指针p+1(不会对野指针进行解引用操作)
2.*++p:等价于*(++p) 先把指针p+1 再对指针p解引用(可能对野指针解引用 会报错)
3.++*p:等价于++(*p) 先把指针p解引用 再把解引用的结果++
4.(*p)++:先对p解引用 拿到指针p指向的变量(假设int a = 10; int *p = &a) *p拿到a 然后再++ 相当于把a++ a最终变为11
所以++*p等价于(*p)++等价于++(*p)
这里的等价是说能达到的效果 放在表达式里还是要考虑前置++和后置++的 如下图
在这里插入图片描述

开始钻牛角尖:既然++的优先级高 那么++*p也应该先算++p啊 正常人的理解都是对的 细想反而想不通了
下面的介绍都是在钻牛角尖 可以不看 没什么太大意义 把最后那俩例题搞懂就ok
类比一下 数学里 减- 的优先级比 乘x 低
++*p类比成:×-p 就是按顺序算下去 就是乘上一个-p 相当于×(-p) 所以++是作用于*p的
优先级高并不意味着“先执行” 而是"先结合"
在这里插入图片描述

有了以上认识 下面的代码就很显然了

在这里插入图片描述
在这里插入图片描述

进一步理解*(p++)和*(++p)

也许会有疑问:*(p++)和*(++p)看上去毫无区别啊 都加上小括号了 那p不肯定得先++?
其实区别就在于前置++和后置++

*(p++):
在这里插入图片描述

*(++p):
在这里插入图片描述

*(p++)和*(++p) 确实++的优先级高 p都是先跟++结合的
优先级高 只能说p和++先结合起来 不代表p就直接要++了!!
p和++结合完 再一看:
发现是前置的 那就先把p++ p++后的结果再给解引用*使用
发现是后置的 那就先把p给解引用*使用 使用完再对p++(容易成为野指针)

这就是为什么下图*(p++) 没有报错说非法访问
因为后置++ 先使用 再++ 先使用的就是当前p的地址 也就是num的地址 肯定不会越界
在这里插入图片描述
像下图这样 前置++的特点是先++ 再使用
先++ p就不指向num了 指向下一个非法的地址 成野指针了 再对野指针解引用 肯定报错
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2213437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端布局与响应式设计综合指南(末)

​🌈个人主页:前端青山 🔥系列专栏:Css篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Css篇专栏内容:前端布局与响应式设计综合指南(末) 目录 61、为什么要初始化CSS样式 62、CSS3 有哪些新特性 63、…

Windows环境下部署LobeChat及远程AI聊天操作指南

文章目录 前言1. LobeChat功能介绍2. 本地安装LobeChat3. 如何使用LobeChat工具4. 安装Cpolar内网穿透5. 实现公网访问LobeChat6. 固定LobeChat公网地址 前言 本文主要介绍如何在Windows系统电脑本地部署LobeChat,一款高颜值的开源AI大模型智能应用,并结…

Ubuntu终端配置

选择shell shell有很多,默认的是bash,一般就够用里,想要花里胡哨点就用zsh,还有最近比较火的fish 如果在刚开始安装完Ubuntu没有改shell,后面就不要改了。 安装的软件会设置环境变量,这些环境变量都是写入…

一个好的维权小程序应该是什么样的?

小程序如今为大家提供了很多的便利服务,且小程序的种类、功能是很多样的,那么对于一个好的维权小程序来说,其功能和设计应该紧紧围绕着用户的需求。 设计页面应该直观简单,功能布局让人一目了然;操作简单,…

我们的“前端学习路线图”,也给大家介绍一下

给大家介绍一下 2024 年最不全的“前端学习路线图”。 虽然有 99% 的概率会躺在你的收藏夹里吃灰,但我还是要介绍一下我们的“前端学习路线图”。 跟其他最全版的前端学习路线图,我们的“路线图”的特点是: 粒度更粗一点范围更广一点样子更…

【c数据结构】二叉树深层解析 (模拟实现+OJ题目)

目录 前言 一、树 1.树的概念与结构 2.树的专业用语 1.根节点 2.边 3.父节点/双亲节点 4.子节点/孩子节点 5.节点的度 6.树的度 7.叶子节点/终端节点 8.分支节点/非终端节点 9.兄弟节点 10.节点的层次 11.树的高度/深度 12.节点的祖先 13.子孙 14.路径 15.森…

【操作系统】五、输入输出(I/O)管理:1. I/O 管理概述(I/O控制器、I/O 控制方式、I/O 软件层次结构、层次间接口)

输入输出(I/O)管理 文章目录 输入输出(I/O)管理十、I/O 管理1.设备分类2. I/O 控制器2.1功能2.2组成 ❗3. I/O 控制方式3.1 程序直接控制方式3.2 中断驱动方式❗3.3 DMA方式3.3.1 DMA控制器 3.4 通道控制方式 ❗4. I/O 软件层次结构4.1用户层软件❗4.2设备独立性软件4.3设备驱动…

【最新发布】华硕Windows10系统一键下载安装!

今天https://www.xitongzhijia.net/小编给大家带来一款适合华硕电脑安装的Windows10系统,该版本系统基于最新Windows10 22H2 19045.5011 64位专业版离线制作,安全无毒,系统打印机驱动意外卸载的问题得到了修复,也解决了一些系统安…

HT8787B 可任意限幅、内置自适应升压的2x9.0W立体声音频功放

1、特征 可任意配置的限幅功能 自由配置音频限制幅度,使输出音频信号限制在固 定失真水平内 内置自动限温控制功能 -适应不同散热条件,避免出现过温关断现象 高效自适应G类升压功能,有效延长播放时间 可调节最大限流值,有效防止电…

数据链路层的流量控制和可靠传输机制

目录 1. 选择等待协议(Stop-and-Wait Protocol) 工作原理: 2. 后退N帧协议(Go-Back-N ARQ) 工作原理: 3. 选择重传协议(Selective Repeat ARQ) 工作原理: 4. 总结 …

学安全的同学都有必要了解的安全产品,雷池社区版(WAF)

网络应用防火墙(WAF,Web Application Firewall)已成为保障网站和应用安全的核心技术之一。 雷池社区版作为国内自主研发的一款优秀开源WAF,凭借其高效、易用和强大的防护能力,成为众多安全从业者学习与使用的首选工具…

HBuilder X中搭建Vue-cli项目组件和路由以及UI库使用(二)

一、创建组件 &#xff08;1&#xff09;在vj1项目src|右键|vue文件 &#xff08;2&#xff09;组件常用模版 <!--该标签用于写HTML代码,必须有一个根标签,如下<div>是根标签--> <template> <div>首页</div> </template><!--该标签用…

【未公开0day】9.9付费进群系统 wxselect SQL注入漏洞【附poc下载】

免责声明&#xff1a;本文仅用于技术学习和讨论。请勿使用本文所提供的内容及相关技术从事非法活动&#xff0c;若利用本文提供的内容或工具造成任何直接或间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果均与文章作者及本账号无关。 fofa语…

git提交到github个人记录

windows下git下载 1.进入git官网https://git-scm.com/downloads/win 一直默认选项即可 2.在settings中SSH and GPG keys中Add SSH key 3.选择git cmd git使用 1.配置用户名&#xff0c;和邮箱 git config --global user.email "youexample.com" git config --g…

Gradle 下载 -- 腾讯镜像

首先查看腾讯镜像里是否有你需要的镜像文件&#xff1a;腾讯 gradle 镜像 例如&#xff1a; 在使用时&#xff0c;只需要替换 gradle-wrapper.properties 文件中的 distributionUrl 就可以了 简单替换地址之后&#xff0c;完全可以使用

【数据结构-栈】力扣155. 最小栈

设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int…

SD NAND Flash 小容量存储解决方案及其STM32测试例程讲解

文章目录 前言一、Flash闪存是什么&#xff1f;二、SD NAND Flash三、STM32测试例程四、总结 前言 随着移动存储技术的快速发展和便携式数字设备的广泛应用&#xff0c;Flash闪存作为非易失性存储解决方案&#xff0c;在各种电子设备中扮演着越来越重要的角色。本文提供关于Fl…

在调用微信公众号H5页面支付提示签名失败

利用的是APIv2密钥&#xff0c;通过咨询微信支付客服&#xff0c;通过验签工具都验证了&#xff0c;没有问题&#xff0c;但是在发布后&#xff0c;环境中还是提示支付验签失败&#xff0c;不知道是什么原因&#xff0c;不知道有没有人遇到过&#xff0c;求大神指点下&#xff…

Kubernetes--深入理解Service与CoreDNS

文章目录 Service功能Service 的常见使用场景 Service的模式iptablesIPVS Service类型ClusterIPNodePortLoadBalancerExternalName Service的工作机制EndpointEndpoint 与 Service 的关系Endpoint 的工作原理命令操作 CoreDNSCoreDNS 的配置CoreDNS 的典型插件Corefile 示例Cor…

程序员的自我修养(链接、装载与库)--摘录与汇总(二)

程序和进程的区别(P150) 程序是一个静态的概念&#xff0c;是一些预先编译好的指令和数据集合的一个文件进程是一个动态的概念&#xff0c;它是程序运行时的一个过程 程序和进程有什么区别 程序&#xff08;或者狭义上讲可执行文件&#xff09;是一个静态的概念&#xff0c;它…