*p++与(*p)++与*(p++)

news/2024/9/12 18:10:55/
这个问题其实是论述*P++等价于(*p)++还是等价于*(p++)的问题,为了验证这个问题,我编写了下面的小程序(vc++6.0编译环境),作为验证
程序1
#include "stdio.h"
void  main()
{
    
int a=2
;
    
int *p=&
a;
    
int *pold;//记录P指向的地址,为了作为比较使用

    pold= p;
    
//-----------原来的信息

    printf("原来的a=%d " ,a);
    printf(
"原来的p=%x "
,p);
    printf(
"原来的pold=%x "
,pold);
    
//----------进行变化

    printf("*p++的结果=%d,a的结果a=%d ",*p++ ,a);
    printf(
"地址变化的结果p-pold=%x ",p-
pold);
}
运行结果是:
程序2
#include  " stdio.h "
void  main()
{
    
int  a = 2 ;
    
int   * p =& a;
    
int   * pold; // 记录P指向的地址,为了作为比较使用
    pold = p;
    
// -----------原来的信息
    printf( " 原来的a=%d " ,a);
    printf(
" 原来的p=%x " ,p);
    printf(
" 原来的pold=%x " ,pold);
    
// ----------进行变化
    printf( " (*p)++的结果=%d,a的结果a=%d " ,( * p) ++ ,a);
    printf(
" a的结果a=%d " ,a);
    printf(
" 地址变化的结果p-pold=%x " ,p - pold);
}
运行结果
程序3
#include  " stdio.h "
void  main()
{
    
int  a = 2 ;
    
int   * p =& a;
    
int   * pold; // 记录P指向的地址,为了作为比较使用
    pold = p;
    
// -----------原来的信息
    printf( " 原来的a=%d " ,a);
    printf(
" 原来的p=%x " ,p);
    printf(
" 原来的pold=%x " ,pold);
    
// ----------进行变化
    printf( " a=%d,(*p)++的结果=%d,a的结果a=%d " ,a,( * p) ++ ,a);
    printf(
" a的结果a=%d " ,a);
    printf(
" 地址变化的结果p-pold=%x " ,p - pold);
}
运行结果:
程序4
#include  " stdio.h "
void  main()
{
    
int  a = 2 ;
    
int   * p =& a;
    
int   * pold; // 记录P指向的地址,为了作为比较使用
    pold = p;
    
// -----------原来的信息
    printf( " 原来的a=%d " ,a);
    printf(
" 原来的p=%x " ,p);
    printf(
" 原来的pold=%x " ,pold);
    
// ----------进行变化
    printf( " *(p++)的结果=%d,a的结果a=%d " , * (p ++ ),a);
    printf(
" a的结果a=%d " ,a);
    printf(
" 地址变化的结果p-pold=%x " ,p - pold);
}
运行结果:
程序5
#include  " stdio.h "
void  main()
{
    
int  a = 2 , * p =& a, * q =& a;
    printf(
" %d %d  " ,( * p),a);
    printf(
" %d %d %d " , * p ++ ,( * p) ++ , * q ++ );
    printf(
" %d " ,a); 
}

运行结果

程序6

#include  " stdio.h "
void  main()
{
    
int  a = 2 , * p =& a, * q =& a;
    printf(
" %d %d  " ,( * p),a);
    printf(
" %d %d %d " ,( * p) ++ , * p ++ , * q ++ );
    printf(
" %d " ,a); 
}

运行结果:

程序7:

#include  " stdio.h "
void  main()
{
    
int  a = 2 , * p =& a, * q =& a;
    printf(
" %d %d  " ,( * p),a);
    printf(
" %d %d %d %d " ,( * p) ++ , * p ++ , * q ++ ,a);
    printf(
" %d " ,a); 
}

运行结果:

程序8:

#include  " stdio.h "
void  main()
{
    
int  a = 2 , * p =& a, * q =& a;
    printf(
" %d %d  " ,( * p),a);
    printf(
" %d %d %d  " , * p ++ ,( * p) ++ , * q ++ );
    p
=& a;q =& a;
    printf(
" %d %d %d %d " ,a, * p,( * q) ++ ,a); 
    printf(
" %d %d %d  %d " ,a, ++ ( * p), ++ ( * q),a); 
    printf(
" %d " ,a);
    
}

运行结果: 

综上所述:
*p++是先取出*p的值,然后让p++
(*p)++是先取出*p的值,让这个值++
*(P++)是先取出*p的值,让p++
所以,*p++等价于*(P++)
而且printf的运行顺序是从右向左运行。而且++是在整个运算表达式运算完才进行,而且右++的执行顺序是从左到右进行。而左++遇到变量就会立即增加变量的值。
验证printf的运算顺序
#include  " stdio.h "
void  main()
{
    
int  a = 2 ;
    printf(
" a++=%d,++a=%d,a++=%d " ,a ++ , ++ a,a ++ );
    printf(
" a=%d " ,a);
}
运行结果:
剩下的工作就是你自己慢慢体会了。

http://www.ppmy.cn/news/173665.html

相关文章

韩国三星GALAX SIII发布有感

5月4日3点12分,看完韩国三星公司新款智能手机发布会,有感。 这款智能手机的系统配置如下: SamsungI9300 Galaxy S III at a glance: General:GSM 850/900/1800/1900 MHz, UMTS 850/900/1900/2100 MHz, HSDPA 21Mbps, HSUPA 5.76 Mbps; 4G (r…

三星固态硬盘PRO 和 EVO的区别

三星固态硬盘PRO和EVO简单来说定位有所区别,PRO定位高端旗舰型号,EVO定位亲民大众型号。我从官方客服得到答案是,EVO用的是闪存颗粒是Samsung V-NAND 3bit MLC,PRO用的闪存颗粒是Samsung V-NAND 2bit MLC,而实际Samsun…

关于++p和p++

p:先引用后增加,先在p所在的表达式中使用p的当前值,后让p加1. p:先增加后引用,让p先加1,然后在i所在的表达式中使用i的新值. 一般变量 比如 a是先输出再,故先输出1,然后输出2&…

850pro测试软件,三星850Pro ssd可靠性测试 6000次P/E

泡泡网SSD固态硬盘频道7月8日 三星前不久发布了850 Pro固态硬盘,性能提升并不明显,但是850 Pro它使用的是三星第二代的V-NAND闪存。测试显示其P/E循环寿命达到了6000次,大约是目前NAND的2倍,但没有达到三星官方所说的10倍可靠性。 三星前不久发布了新一代的850 Pro固态硬盘…

美版三星s7 g930 p版刷官方国际版安卓8以及手机卡信号和关闭DM服务相关问题

看了很久没有美版单卡g930p的详细刷机教程,就随手出了一篇。首先说一下,机子是两三年前的机子了,反正好久了具体多久也记不清了,刚买来的时候是还在出note7,因为是水货美版,所以没办法跟国行的刷新走&#…

聚观早报 | 三星Q3季度营业利润暴跌;iPhone 14 Plus开始交付

今日要闻:三星Q3季度营业利润暴跌31.7%;苹果iPhone 14 Plus已经开始交付;蔚来以租赁形式进军欧洲市场;特斯拉将于年底交付百事半卡订单;法拉第未来执行董事宣布辞职 三星Q3季度营业利润暴跌31.7% 10 月 7 日消息&…

三星入职测试GSAT(global samsung aptitude test)

试题内容 GSAT(global samsung aptitude test)包含三个部分,分别为数理,推理,视觉,全部为选择题。 数理 此部分考查基本的数理能力,常见的题型基本就是初中数学的内容,需要准备一下一些几何体体积公式&a…

ES6中新增的Set/Map两种数据结构

前言 Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构🧀🧀🧀 什么是集合?什么又是字典? 集合 是由一堆无序的、相关联的、且不重复的内存结构【数学中称之为元素】组成的组合字典 是一些元素的…

操作系统-计算机系统概述-特性发展分类分层结构

目录 一、定义 1.1特征 二、操作系统的分类和发展 2.1手工操作阶段 2.2批处理阶段 2.2.1单道批处理系统 2.2.2多道批处理系统 2.3分时操作系统 2.4实时操作系统 2.5 网络操作系统 2.6分布式操作系统 2.7 个人计算机操作系统 三、操作系统的运行与机制 内核态和用…

如何入门编程?

如何入门编程? 编程是一项很受欢迎的技能,也是很多技术人员和程序员的基础技能之一,拥有编程技能的人可以轻松地创建自己的网站、应用程序或游戏,而且有可能找到很好的工作。然而,对于初学者来说,入门编程…

C++进阶 —— 右值引用(C++11新特性)

八,右值引用 右值引用介绍 C98提出了引用的概念,引用即别名,引用变量与其引用实体公共同一块空间,二引用底层是通过指针来实现的,使用引用可提高程序的可读性; void swap(int& left, int& right) …

2023深圳影音集成及家庭娱乐展览会

时间:2023年4月9-11日 地点:深圳会展中心 展会概况: 后疫情时代,广大消费者们备受压抑的家庭娱乐需求只需一个合适的契机就会全面爆发。现在,这个契机已经到来!随着人们对生活品质的要求逐渐提高&#xff0c…

linux构建widi显示服务,教你四步轻松搞定WiDi 体验无线家庭影院

其实Intel WiDi技术离我们并不遥远,除了购买相关设备外,我们只需要四步就可完成所有的WiDi准备工作,想体验无线显示的乐趣么?马上学习这部Intel WiDi技术快速教程吧! 第一步:准备Intel无线网卡笔记本 想体验…

无线应用方案

ZigBee组网(有ZigBee模块,数据接口控制板,上位机系统软件。应用在酒店,医院,工厂,小区组网数据传输控制)双向透明传输模块(串口,485接口,双向数据传输。应用于…

Jellyfin 打造家庭影院 视频硬解 (威联通 QNAP)

家庭影院 最近添置了一个威联通(QNAP)的NAS。准备搭建一个家庭影音中心,网上群晖的资料相当多,威联通的略少,因此在这里记录一下搭建过程以及遇到的问题,以飨读者。 媒体服务软件 影音媒体管理软件目前流…

mesh路由器哪个品牌好(无线mesh组网推荐路由器)

对大户型、楼房、别墅甚至是公司的来说,解决 WiFi 的覆盖率是一个头疼的问题。无论路由器放在哪个位置,总有一些地方是覆盖不到的。 本篇文章会由浅到深的讲述 Mesh 的各种技术细节、产品选购,希望能够解答所有关于 Mesh 的疑问,帮…

树莓派搭建家庭影院

目录 1.搭载samba文件服务器 1.1挂载U盘 1.2 安装samba服务 2安装DLNA 自从拿到树莓派后,除了开头一个月把玩了几天,之后一直在积灰。这次把它拿出来,打算建一个小型的家庭影院。参考CSDN里各位大大的攻略,终于实现了。现在把…

树莓派-12-投屏秒变家庭影院kodi跨平台媒体播放器

为什么是打造家庭影院,主要还是因为我有台电视机,想把手机投屏到上面看电影,但又不想买电视盒子,干脆就用树莓派来打造好了。 参考通过KODI 观看IPTV电视直播 手把手教程 参考[原创干货]用树莓派看电视 参考PotPlayer新用法&…

罗德与施瓦茨FSWP26相位噪声分析仪

罗德与施瓦茨FSWP26 相位噪声分析仪和VCO测试仪 FSWP相位噪声分析仪和VCO测试仪结合极低噪声内源和互相关技术,实现了相位噪声测量的超高灵敏度。因此,即便测量高度稳定的源 (例如在雷达应用中的源) 也只需几秒钟。脉冲信号测量、附加相位噪声 (包括脉冲…

在清凉客厅,和飞利浦Fidelio B95家庭影院一起感受炙热好声音

你有多久没去过人山人海的音乐现场?你有多久没有和一大群素不相识的乐迷们聚在一起唱到喉咙嘶哑?这个如火盛夏,跟随飞利浦影音一起开启“Fidelio音乐之旅”。不必远行,在打开空调的清凉客厅,飞利浦Fidelio B95家庭影院…