【原创】一起学C++ 之指针的--/++ ---------C++ primer plus(第6版)

讲*和++同时用于指针时提出了这样的问题:将什么解除引用,将什么递增。

double arr[5]={21.1, 32.8, 23.4, 45.2, 37.4 };
double *pt=arr;       //pt指针指向arr[0] 值为 21.1
++pt;                  //pt指针指向arr[1] 值为 32.8     

前缀运算符的从右到左结合规则意味着

*++p 的含义如下:

  先将++应用于pt(因为++位于*的右边)然后将*应用于被递增后的pt--》指针递增

double x=*++pt; //指针+1,指向arr[2] 值为23.4

++*pt 的含义如下:

  意味着先取得pt指向的值,然后将这个值再加一 ---》指向的值递增

++*pt; //指向的值+1   23.4+1=24.4

(*pt)++ 的含义如下:

  圆括号指出,首先对指针解除引用,得到24.4.然后,运算符++将这个值递增到25.4,pt仍指向arr[2]

(*pt)++; 

*p++ 的含义如下:

x=* pt++;

  后缀运算符++的优先级更高,这意味着将运算符用于pt,而不是*pt,因此对指针递增。

  然而后缀运算符意味着将对原来的地址(&arr[2])而不是递增后的新地址解除引用,因此*pt++的值为arr[2],即25.4,

  但该语句执行完毕后,pt的值将为arr[3]的地址。

#include "stdafx.h"
#include <iostream>
int main()
{
    using namespace std;
    double arr[5]={21.1, 32.8, 23.4, 45.2, 37.4};
    double *pt=arr;
    ++pt;
    int a;
    double x;
    cout<<*++pt<<endl;
    cout<<++*pt<<endl;
    cout<<(*pt)++<<endl;
    cout<<*pt++<<endl;
    x=*pt++;
    cout<<x<<endl;
    cin>>a;
}

注意:指针递增和递减都遵循指针的运算规则,如果pt指向某个数组的第一个元素,++pt将修改pt的值(第一个元素),并指向第二个元素地址(第二个元素值不变)

时间: 2024-10-07 08:38:42

【原创】一起学C++ 之指针的--/++ ---------C++ primer plus(第6版)的相关文章

【原创】一起学C++ 之-&gt;(箭头符号) ---------C++ primer plus(第6版)

C++新手在指定结构成员时,不知道何时用.运算符,何时是用->运算符. 结论:如果结构标识符是结构名,则使用句点运算符:如果标识符是指向结构的指针,则使用箭头运算符. #include <iostream> struct inflatable { char name[20]; float volume; double price; }; int main(){ using namespace std; int a; //仅为保持dos界面 inflatable *ps=new infla

HTML5移动开发即学即用(双色) 王志刚 pdf扫描版?

HTML5已经广泛应用于各智能移动终端设备上,而且绝大部分技术已经被各种最新版本的测览器所支持:逐一剖析HTML5标准中包含的最新技术,详细介绍了HTML5新标准中提供的各种API,各种各样的应用实例,可以直接应用于自己的HTML5程序中. HTML5移动开发即学即用(双色)书中几乎涵盖了HTML5规范中涉及的所有技水(还在酝酿中的IndexedDatabase除外),是您能找到的真正的HTML5技术大全.包含作者精心编写的,运行于常用PC测览器以及智能手机上的应用实例,操作性与实用性俱佳,可以

从零开始学Python程序设计(Python 3.5以上)中文pdf扫描版[172MB]高清下载

Python语言是面向对象的模块化设计语言,它易于学习.易于维护.可读性强,适合初学者作为入门程序设计语言. <从零开始学Python程序设计>以Python3.5版本作为教学版,针对初学者的特点,分为五篇内容进行全面讲解:第壹篇为基础入门篇(第1-3章),介绍Python语言的基本功能:第二篇为有序和无序篇(第4-6章),介绍控制台应用程序和窗口应用程序:第三篇为标准函数篇(第7和8章),介绍标准函数库的应用:第四篇为面向对象篇(第9-11章),介绍封装.继承和多态:第五篇为高级篇(第12-

C编译器剖析_1.5 结合C语言来学汇编_指针、数组和结构体

让我们再来看一份C代码,及其经UCC编译器编译后产生的主要汇编代码,如图1.33所示,其中包含了数组.指针和结构体. 图1.33 数组.指针和结构体 按照C的语义,图1.33第9行的C代码是对局部数组number的初始化,需要把number[0]初始化为2015,而数组中的其他元素皆被初始化为0.UCC编译器采取的翻译方法是:先调用memset函数来把数组number所占的内存空间清0,然后再把number[0]设为2015,如图1.33的第17至24行所示.C库函数memset的API如下所示

没事抽空学——c语言指针操作基础概念

指针基础 理解指针的最佳方法是画图,学习使用基本指针,不要产生空指针. 存储控件分配 存储控件分配是指在内存预留空间的过程.就像一个虚拟菜谱一样,指针对应菜名,其所指的内存空间中的数据对应实际的菜. 数据集合与指针的算术运算 数据集合主要指结构和数组.指针的算术运算定义指针的计算规则.指向结构的指针对于建立数据结构起着至关重要的作用.在c中,数组和指针一样,都是以指针算术运算方法进行运算的. 作为函数参数的指针 通过这种方式,可以按照传递应用的方法传递函数参数.在c语言中,传递数组或大型结构时,

函数指针(——C primer 第13章)

函数指针: int  f(int);//声明一个函数 int  (*pf)(int)=&f;//创建一个函数指针,并将函数f的函数地址对它进行初始化. 其实函数名在被使用时,总是由编译器将它转化为指针.上面的那个&那个并非必要,只是显示 的说明编译器将隐式执行的任务. int ans; ans=f(25);//使用名字调用函数f,其实在执行时,函数名f被转化为函数指针,指向函数在内存中的地址. ans=(*pf)(25);//将函数指针转化为函数名,其实在执行时又转化回去了 ans=pf(

数组与指针(二)

对于数组,我们最为头痛的莫过于数组与指针的关系.在我看来,想要把数组和指针的关系理解通透,关键在于理解指针的关联类型(每个指针都有一个与之关联的数据类型).因为文章的篇幅比较长,所以分成了两篇,这是第二篇(没看第一篇的可以先看这里哦,磨刀不误砍柴工,大家要有点耐心 ^ ^ )http://www.cnblogs.com/CatDrinkMilk/p/4331355.html 二维数组与指针 在C++中,其实并没有真正意义上的多维数组,所有的多维数组其本质都是数组的数组(这句话很拗口,大家要多想几

【转】 史上最详尽的平衡树(splay)讲解与模板(非指针版spaly)

ORZ原创Clove学姐: 变量声明:f[i]表示i的父结点,ch[i][0]表示i的左儿子,ch[i][1]表示i的右儿子,key[i]表示i的关键字(即结点i代表的那个数字),cnt[i]表示i结点的关键字出现的次数(相当于权值),size[i]表示包括i的这个子树的大小:sz为整棵树的大小,root为整棵树的根. 再介绍几个基本操作: [clear操作]:将当前点的各项值都清0(用于删除之后) inline void clear(int x){ ch[x][0]=ch[x][1]=f[x]

C语言——指针的进阶

当我们学习C语言时,一般都会觉得指针这块是比较难理解的.而指针一般分为一级指针.二级指针.指针和数组.指针数组等.下面就是我对这几种的简单理解.指针实际就相当于地址,它是数据的唯一标识. 1.一级指针分为整形指针和字符指针 (1.)字符指针 ——类型为char * 型,就是指向字符(char)的指针.(相当于一个指针变量里存储的是字符的地址),如下面简单例子所示. #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <