电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

(C++-面向对象程序设计-谭浩强)第6章--指针(共72页)

73页
  • 卖家[上传人]:M****1
  • 文档编号:494932017
  • 上传时间:2022-12-04
  • 文档格式:DOC
  • 文档大小:1.20MB
  • / 73 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、精选优质文档-倾情为你奉上第6章 指针6.1 指针的概念6.2 变量与指针6.3 数组与指针6.4 字符串与指针6.5 函数与指针6.6 返回指针值的函数6.7 指针数组和指向指针的指针6.8 有关指针的数据类型和指针运算的小结*6.9 引用第6章 指针6.1 指针的概念为了说清楚什么是指针,必须弄清楚数据在内存中是如何存储的,又是如何读取的如果在程序中定义了一个变量,在编译时就给这个变量分配内存单元系统根据程序中定义的变量类型,分配一定长度的空间例如,C+编译系统一般为整型变量分配4个字节,为单精度浮点型变量分配4个字节,为字符型变量分配1个字节内存区的每一个字节有一个编号,这图6.1就是“地址”第6章 指针图6.1第6章 指针请务必弄清楚一个内存单元的地址与内存单元的内容这两个概念的区别在程序中一般是通过变量名来对内存单元进行存取操作的其实程序经过编译以后已经将变量名转换为变量的地址,对变量值的存取都是通过地址进行的这种按变量地址存取变量值的方式称为直接存取方式,或直接访问方式还可以采用另一种称为间接存取(间接访问)的方式可以在程序中定义这样一种特殊的变量,它是专门用来存放地址的图

      2、6.2是直接访问和间接访问的示意图为了将数值3送到变量中,可以有两种方法: (1) 直接将数3送到整型变量i所标识的单元中见图6.2(a)第6章 指针(2) 将3送到指针变量i_pointer所指向的单元(这就是变量i所标识的单元)中见图6.2(b)图6.2所谓指向,就是通过地址来体现的由于通过地址能找到所需的变量单元,因此可以说,地址指向该变量单元因此将地址形象化地称为“指针”一个变量的地址称为该变量的指针如果有一个变量是专门用来存放另一变量地址(即指针)的,则它称为指针变量指针变量的值(即指针变量中存放的值)是地址(即指针)第6章 指针6.2 变量与指针指针变量是一种特殊的变量,它和以前学过的其他类型的变量的不同之处是: 用它来指向另一个变量为了表示指针变量和它所指向的变量之间的联系,在C+中用“*”符号表示指向,例如,i_pointer是一个指针变量,而*i_pointer表示i_pointer所指向的变量,见图6.3下面两个语句作用相同: i=3; *i_pointer=3; 图6.3第6章 指针6.2.1 定义指针变量C+规定所有变量在使用前必须先定义,即指定其类型在编译时按

      3、变量类型分配存储空间对指针变量必须将它定义为指针类型先看一个具体例子: int i,j; /定义整型变量i,jint *pointer_1, *pointer_2; /定义指针变量*pointer_1,*pointer_2第2行开头的int是指: 所定义的指针变量是指向整型数据的指针变量也就是说,指针变量pointer_1和pointer_2只能用来指向整型数据(例如i和j),而不能指向浮点型变量a和b这个int就是指针变量的基类型指针变量的基类型用来指定该指针变量可以指向的变量的类型定义指针变量的一般形式为第6章 指针基类型 *指针变量名;下面都是合法的定义: float *pointer_3; / pointer_3是指向单精度型数据的指针变量char *pointer_4; / pointer_4是指向字符型数据的指针变量请注意: 指针变量名是pointer_3和pointer_4,而不是*pointer_3和*pointer_4,即“*”不是指针变量名的一部分,在定义变量时在变量名前加一个“*”表示该变量是指针变量那么,怎样使一个指针变量指向另一个变量呢?只需要把被指向的变量的

      4、地址赋给指针变量即可例如: pointer_1=&i; /将变量i的地址存放到指针变量pointer_1中pointer_2=&j; /将变量j的地址存放到指针变量pointer_2中第6章 指针这样,pointer_1就指向了变量i,pointer_2就指向了变量j见图6.4图6.4一般的C+编译系统为每一个指针变量分配4个字节的存储单元,用来存放变量的地址在定义指针变量时要注意: (1) 不能用一个整数给一个指针变量赋初值(2) 在定义指针变量时必须指定基类型第6章 指针6.2.2 引用指针变量有两个与指针变量有关的运算符: (1) &取地址运算符(2) *指针运算符(或称间接访问运算符)例如: &a为变量a的地址,*p为指针变量p所指向的存储单元第6章 指针例6.1 通过指针变量访问整型变量#include using namespace std;int main( )int a,b; /定义整型变量a,bint *pointer_1,*pointer_2; /定义指针变量*pointer_1,*pointer_2 a=100;b=10; /对a,b赋值pointer_1=&a;

      5、 /把变量a的地址赋给pointer_1pointer_2=&b; /把变量a的地址赋给pointer_2couta bendl; /输出a和b的值cout*pointer_1 *pointer_2endl; /输出*pointer_1和*pointer_2的值return 0;第6章 指针运行结果为100 10 (a和b的值)100 10 (*pointer_1和*pointer_2的值)请对照图6.5分析图6.5第6章 指针下面对“&”和“*”运算符再做些说明: (1) 如果已执行了“pointer_1=&a;”语句,请问&*pointer_1的含义是什么?“&”和“*”两个运算符的优先级别相同,但按自右至左方向结合,因此先进行*pointer_1的运算,它就是变量a,再执行&运算因此,&*pointer_1与&a相同,即变量a的地址如果有pointer_2=&*pointer_1;它的作用是将&a(a的地址)赋给pointer_2,如果pointer_2原来指向b,经过重新赋值后它已不再指向b了,而也指向了a,见图6.6图6.6(a)是原来的情况,图6.6(b)是执行上述赋值语句

      6、后的情况第6章 指针图6.6(2) *&a的含义是什么?先进行&a的运算,得a的地址,再进行*运算,即&a所指向的变量,*&a和*pointer_1的作用是一样的(假设已执行了“pointer_1=&a;”),它们等价于变量a即*&a与a等价,见图6.7第6章 指针图6.7例6.2 输入a和b两个整数,按先大后小的顺序输出a和b(用指针变量处理)解此题的思路是: 设两个指针变量p1和p2,使它们分别指向a和b使p1指向a和b中的大者,p2指向小者,顺序输出*p1,*p2就实现了按先大后小的顺序输出a和b按此思路编写程序如下: 第6章 指针#include using namespace std;int main( )int *p1,*p2,*p,a,b;cinab; /输入两个整数p1=&a; /使p1指向ap2=&b; /使p2指向bif(ab) /如果ab就使p1与p2的值交换p=p1;p1=p2;p2=p; /将p1的指向与p2的指向交换couta=a b=bendl;coutmax=*p1 min=*p2endl;return 0;运行情况如下: 第6章 指针4578a=45

      7、b=78max=78 min=45输入a的值45,b的值78,由于ab,将p1的值和p2的值交换,即将p1的指向与p2的指向交换交换前的情况见图6.8(a),交换后的情况见图6.8(b)图6.8请注意,这个问题的算法是不交换整型变量的值,而是交换两个指针变量的值第6章 指针6.2.3 指针作为函数参数函数的参数不仅可以是整型浮点型字符型等数据,还可以是指针类型它的作用是将一个变量的地址传送给被调用函数的形参例6.3 题目同例6.2,即对输入的两个整数按大小顺序输出这里用函数处理,而且用指针类型的数据作函数参数程序如下: 第6章 指针#include using namespace std;int main( ) void swap(int *p1,int *p2); /函数声明int *pointer_1,*pointer_2,a,b; /定义指针变量pointer_1,pointer_2,整型变量a,bcinab;pointer_1=&a; /使pointer_1指向apointer_2=&b; /使pointer_2指向bif(ab) swap(pointer_1,pointer_2); /如果ab,使*pointer_1和*pointer_2互换coutmax=a min=bendl;/a已是大数,b是小数 return 0;void swap(int *p1,int *p2) /函数的作用是将*p1的值与*p2的值交换 int temp;temp=*p1; *p1=*p2;*p2=temp; 第6章 指针运行情况如下: 45 78max=78 min=45请注意: 不要将main函数中的swap函数调用写成if(ab) swap(*pointer_1,*pointer_2);图6.9第6章 指针请注意交换*p1和*p2的值是如何实现的如果写成以

      《(C++-面向对象程序设计-谭浩强)第6章--指针(共72页)》由会员M****1分享,可在线阅读,更多相关《(C++-面向对象程序设计-谭浩强)第6章--指针(共72页)》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.