首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >*p++ += 2是否定义良好?

*p++ += 2是否定义良好?
EN

Stack Overflow用户
提问于 2014-10-17 02:49:45
回答 2查看 1.3K关注 0票数 16

我不确定下面的语句是否由标准C语言很好地定义

代码语言:javascript
运行
AI代码解释
复制
*p1++ += 2;

或其他类似的声明:

代码语言:javascript
运行
AI代码解释
复制
*E1++ <operator>= E2

从标准C到后增量:

后缀++运算符的结果是操作数的值。获得结果后,操作数的值递增。(也就是说,相应类型的值1将添加到该值中。)有关约束、类型和转换以及操作对指针的影响的信息,请参阅对加法运算符和复合赋值的讨论。更新操作数存储值的副作用应发生在前一个序列点和下一个序列点之间。

关于coumpund-assignment:

E1 op= E2形式的复合赋值与简单赋值表达式E1 = E1 op (E2)的不同之处只在于左值E1只计算一次。

EN

回答 2

Stack Overflow用户

发布于 2014-10-17 02:56:11

让我们稍微重写一下,让它更清晰:

代码语言:javascript
运行
AI代码解释
复制
(*p1++) += 2

因此,p1的旧值将被取消引用,并将2添加到其引用对象中。并且p1将在它被解除引用之后(或者至少在它的旧值被加载并等待被解除引用之后)递增。这里没有问题:所有的片段都不会被多次使用。

话虽如此,为了清晰起见,您应该考虑重写代码:

代码语言:javascript
运行
AI代码解释
复制
*p1 += 2;
++p1;
票数 23
EN

Stack Overflow用户

发布于 2014-10-17 10:02:49

后缀增量运算符(++)给出操作数的值,即它给出一个后缀r值。R值表示它在赋值运算符(=)的左侧用作操作数。

代码语言:javascript
运行
AI代码解释
复制
int i = 0;
i++ = 0   // [Error] lvalue required as left operand of assignment  

如果

代码语言:javascript
运行
AI代码解释
复制
*p1++ += 2;  

后缀++不适用于*p1,但它适用于指针p1++。这是因为后缀++比取消引用操作符*具有更高的优先级。因此,编译器会将上面的语句解析为

代码语言:javascript
运行
AI代码解释
复制
*(p1++) += 2;

这上面写的是:

在添加2并将结果赋给它之前,必须对

  • *p1进行求值(以生成变量)。要存储到*p1
  • 结果必须在递增到p1之前求值。
  • 一旦评估了*p1p1就可以随时递增。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26417120

复制
相关文章
2、指针与自增运算*p++
自增自减运算是经常考容易出错的知识点,加上指针这个令人头疼的,马上有想放弃的冲动。希望看了这篇文章能有所收获。
用户6755376
2020/02/24
2.7K0
指针 *p++ 与 (*p)++ 的区别
C语言的指针(pointer),是内存中存储单元的存储地址,指针变量就是专门用来存储其他变量的地址的变量。
叶茂林
2023/07/28
1610
js判断变量是否定义
在 JavaScript 中, null 用于对象, undefined 用于变量,属性和方法。
全栈程序员站长
2022/07/11
6.5K0
ThinkPHP3.2.3判断变量是否被定义(变量是否存在)
一:判断变量是否存在 传入数组 $this->assign('sel',$sel); 模板判断 <input name="tel" type="text" value="<present name="sel['l_ptel']">{$sel['m_ptel']}<else />222222222</present>"> 注意name="sel['l_ptel']"中不使用 切换存在的变量 <input name="tel" type="text" value="<present name="sel['m
botkenni
2022/01/10
1.3K0
ThinkPHP3.2.3判断变量是否被定义(变量是否存在)
养成良好的编程习惯
4.从源头避免版本不一致问题(当同一个文件在不同目录下出现拷贝时,容易出现其中某个未同步更新的问题)
一见
2018/08/07
3270
样品GA的良好理解
遗传算法演示样本手册模拟为了更好地理解遗传算法的计算过程,法的各个主要运行步骤。 例:求下述二元函数的最大值:
全栈程序员站长
2022/07/14
3660
样品GA的良好理解
养成良好的开发习惯
写数据库的crud的时候,能批量就批量了,别写什么一个id查一个数据,批量获取就包含了它了,只要再写一个类处理一下,就省下很多sql语句了。
ydymz
2018/09/10
4300
p=p+1与p++的区别
其结果值相等 但是在计算p = p+1的时候,CPU的顺序是这样的 1. 首先找到p+1中右边p的地址,记住,CPU并不知道左边的p和右边的p是同一个地址,他会将这两个p视为两个不同的变量。 2. 找到右边的p的地址后,然后加1, 3,这一步就是找左边的p的地址。 4.将结果赋值给左边的p。结束 5. 计算机是不是很笨,是的,他很笨,但是他速度快,并且他严格按照规矩办事,所以一般不会出现错误。 当执行p++的时候。 1.找到p的地址,然后加1,结束。 可以看出,p=p+1和p++结果是一样的,但是这个计算过
Dar_Alpha
2018/09/03
8610
如何培养良好的编程习惯?
首先你的项目结构要清晰,养成良好的文档结构分类习惯是很有必要的,举个最简单的web网站项目。
Bug生活2048
2018/08/31
1.2K0
如何培养良好的编程习惯?
原程序运行良好,Pyinstaller
昨天决定分享一下最近写的exhentai爬虫程序,参考了这篇文章,看了下里面几个常见打包软件的简介表格(可惜没nuitka) 因为是给小白用户使用,做成单个文件形式,只能在Pyinstaller和py2exe之间选择 去各自官网看了下,发现py2exe很久没更新了,对python3新版本的支持也不是太好,就决定用Pyinstaller来封装/打包 这里略过Pyinstaller的安装和使用,重点说明症状,分析过程,解决办法和教训
py3study
2020/01/03
1K0
良好的CSS编码习惯
一个 css 文件的核心内容是由许许多多的 css 规则组成的,而每个规则又包含了两部分:选择器和声明;声明块里可能又包含多个声明,每个声明又是由属性和值组成的。这个大概就是 css 的代码结构。
用户4456933
2021/06/01
6000
良好的CSS编码习惯
「SEO策略」良好的SEO基础优化
做好SEO并不是一件容易的事情。它不仅需要多种不同的方法随着时间的推移而变化,并且不遵循特定的模式,而且还受到不断变化的搜索引擎策略的影响。
黄伟SEO
2018/07/27
9100
10-2 判断是否为素数
预览图如下 #include<stdio.h> #include <windows.h> int main() { int prime(int x); int n; system("color f0"); printf("请输入一个正整数\n该正整数要求大于1\n程序目的:判断这个数是否为素数\n"); scanf("%d",&n); if(prime(n)) printf("这个数是素数!\n"); else printf("这个数不是素数!\n"); return 0
天天Lotay
2022/12/01
2070
10-2 判断是否为素数
构建布局良好的Windows程序
工具箱→菜单和工具栏 菜单栏 MenuStrip的类型 MenuItem:菜单项 TextBox:文本框 ComboBoX:组合框 Separato:分割线 前面都有ToolStrip做前缀 Applaction.Exit() 退出整个应用程序,关闭所有窗体 this.Close()  关闭当前窗体 都会触发FormClosed事件和FormClosing事件 带图片的工具栏 属性名称     说明 displaystyle   是否显示图像和文本 image    将显示的图像 imageScaling 
房上的猫
2018/03/14
1.6K0
OpenAI“大力出奇迹”的GPT2同样适用图像领域,训练性能良好
GPT-3的热度还在发酵,OpenAI又放了个大招。这次的研究往图像界迈出了新的一步。
大数据文摘
2020/06/20
9650
自定义View【2】
在前面的文章中我们学习了部分绘制的相关方法,在本篇文章中我们会继续再介绍一些常用的绘制方法。
flyou
2018/11/20
4500
IdentityServer Topics(2)- 定义资源
您通常在系统设计中的第一件事就是您要保护的资源。 这可能是您的用户的身份信息,如个人资料数据或电子邮件地址,或访问API。 您可以使用C#对象模型定义资源(硬编码),或从数据存储中加载它们。 IResourceStore的实现处理这些低级细节。 本文使用的是in-memory的实现。 定义身份资源 身份资源也是数据,如用户ID,姓名或用户的电子邮件地址。 身份资源具有唯一的名称,您可以为其分配任意身份信息单元(比如姓名、性别、身份证号和有效期等都是身份证的身份信息单元)类型。 这些身份信息单元将被包含
晓晨
2018/06/22
5430
持续集成良好实践 v0.2
本文标题之所以没有使用“最佳实践”,而是使用了“良好实践”,是因为下面每个实践在各个背景不同的团队落地时,都有可改进的空间。
程序员吾真本
2019/03/11
8130
持续集成良好实践 v0.2
如何构建运行良好的Vue组件
作者:Kevin Ball 译者:前端小智 来源:vuejsdevelopers 很少有人最初编写Vue组件时打算将其开源。我们大多数人都是从自己编写组件开始的——我们有一个问题,然后决定通过构建一个
前端小智@大迁世界
2020/05/12
3.7K0
如何构建运行良好的Vue组件
点击加载更多

相似问题

C指针:*p++和p++差

43

取消引用后,*p++是否会递增?

50

等待(NULL)是否定义良好?

15

++*p++输出

22

什么是*p++=x

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文