




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、,(第二十讲),C+语言程序设计,让函数“返回”多个值 神奇的指针,第6章 指 针(1),一、教学目的:明确地址和指针的概念;掌握指针变量的定义和引用;明确变量直接访问和间接访问的概念;明确指针移动的概念,掌握指针移动的方法;明确二级指针的概念,初步掌握二级指针的使用;初步掌握利用指针变量设计程序;算法和程序设计能力的训练。,二、教学重点:地址和指针的概念;变量直接访问和间接访问的概念;指针移动的概念和方法;指向变量的指针变量的概念;指针变量的使用;算法和程序设计。,三、教学难点:变量的指针的概念;指向变量的指针变量的概念;指针变量的使用;算法和程序设计。 四、教学过程:,6.0 指针概述,
2、指针是C语言的重要概念,也是C语言的特色。 使用指针,可以增加编程的能力,使程序简洁高效。 6.1 指针基础 6.1.1 地址与指针 1、程序实体的内存地址,一个程序一经编译,在其执行过程中就会为变量、数组以及函数分配存储空间。 这些变量、数组、函数都称为程序实体,也具有某种数据类型。 这些被分配了内存空间的程序实体都具有自己的内存地址。,#include using namespace std; int main(void) int i1,i2,a10; float f1,f2; double d1,d2; printf(“数据大小:int:%d;float: %d;double:%dn,s
3、izeof(i1), sizeof(f1),sizeof(d1); printf(i1:%ld, i2:%ldn, ,例6.1 程序实体的内存地址 C+20_1,地址,变量,1245024,1245032,1245040,1245044,1245048,1245052,d2,d1,f2,f1,i2,i1,变量存储空间的分配顺序是:先声明的变量后分配存储空间;撤销的顺序与之相反:先建立的后撤销。这种机制就称为栈机制。 每个变量只有一个地址,但占用的空间不同。,2、指针的概念,(1) 概念:一个变量的内存地址就称为指向该变量的指针。 变量是具有类型的,因此指针也依附于所指变量的类型。一个指针所指变
4、量的类型,称为该指针的基类型。 (2) 内存单元的地址和内存单元的内容的区别,低地址,高地址,2000,2080,3000,i,j,如:int i,j;,若 i=3,j=6;,6.1.2 指针变量及其定义 1、指针变量的概念 (1) 指针变量的概念 语言中可以定义多种类型的变量,各自存放相应类型的数据,而地址也是数据,也可以存储于变量中。C语言中可以定义和使用一种特殊类型的变量用来存放变量的地址的变量。,2000,3000,i,j,2080,2800,2000,ip,(2) 变量的间接访问,设已经定义变量 ip 用来存放整型变量的地址,它被分配到内存单元28002803。,通过执行语句:ip=
5、,*ip=5;,结论:*ip与i等价。,补充例1:,若:ip=,x=i+1;,结论:*ip与x等价。, 说明 取地址运算符只能作用于变量: 不能把整数赋值给一个指针变量:ip=2800 是无意义的; 不能把一个指针变量的值赋值给一个整型变量:x=ip 是无意义的。,2、指针变量的定义,(1) 指针变量的定义格式 基类型标识符 *指针变量名; 如:int *p1;,表示p1是一个指针变量,它的值是某个整型变量的地址。或者说p1指向一个整型变量。至于p1究竟指向哪一个整型变量,应由向p1赋予的地址来决定。,再如: int *p2,*p3; /* p2、*p3是指向整型变量的指针变量 */ floa
6、t *p4; /* p4是指向浮点变量的指针变量 */ char *p5; /* p5是指向字符变量的指针变量 */ (2) 说明 一个指针变量只能指向同类型的变量,如p4 只能指向浮点变量,不能时而指向一个浮点变量,时而又指向一个字符变量。, “*”只表示定义的变量为指针变量,但指针变量名中并不包含“*”;“*”是指针变量的标志。, 定义指针变量时,指定了它所指向的变量的数据类型,且必须指定其所指向的变量的数据类型,而且使用过程中只能指向同一种类型的变量。, 指针变量定义后,系统为变量分配一个存储单元,用来存放地址。 指针变量定义后,若不赋值,其值是不确定的。 3、指针变量的初始化和赋值 和
7、其他变量一样,指针变量也可以进行初始化。可以用变量的地址对指针变量进行初始化,但必须注意:该变量的类型必须和指针变量的基类型相同。 也可以用一个指针变量的值给另个指针变量赋值,但它们应该具有相同的基类型。,例如,int i1,i2,i3;* 定义i1、i2、i3为整型变量 */ int *pi1=,printf(%d,%dn,a,b); printf(%d,%dn,*pointer_1, *pointer_2); ,a=100;b=10;,pointer_1=,pointer_2=,100,10,main() int a,b;,补充例 通过指针变量访问变量 C+20_2,6.1.3 指针变量的
8、引用,1、引用指针变量 当一个指针变量被初始化或被赋值之后,它就指向一个特定的变量。这时,就可以使用指针访问它所指向的内存空间。 使用指针访问它所指向的内存空间(所指向的变量)的方法是在指针变量名前加一个“*”号。 (1) 方法,定义变量(int i,*pi;),通过指针变量访问变量 (输出*pi、*pi=*pi+1;等),指针变量取得变量的地址 (pi=),#include using namespace std; int main(void) int i=0; int *pi= ,例6.2 指针 变量的引用 C+20_3,2、使用指针变量需要注意的问题,(1)使用指针,首先应区分指针变量与
9、其所指存储单元之间的不同。,例6.3 使两个指针变量交换指向 C+20_4,#include using namespace std; int main(void) int i1=10,i2=20,*p,*p1,*p2;,p1,p2,p,p2=,printf(i1=%d,*p1=%d; i2=%d,*p2=%dn,i1,*p1,i2,*p2); p=p1;,printf(i1=%d,*p1=%d; i2=%d,*p2=%dn,i1,*p1,i2,*p2); ,p1=p2;,p2=p;,p1=,#include using namespace std; int main(void) int *p
10、1,*p2,i1=10,i2=20,i; p1= ,例6.4 交换两个指针变量所指向 的变量的值 C+20_5,(2) 可以引用指针所指向的单元的值 指针必须经过初始化或赋值,使其有确定的值,指向有效的程序实体,才能正确地引用所指单元的内容。 如果指针变量未经赋值,它并非无值,而是一个未知值或不确定的值,它所指向的存储单元也是未知的或不确定的。,3、再论运算符“*”和“ int main(void) int i1,i2; int *pi1= ,例6.5 同类型指针变量间的赋值 C+20_7,例6.6 指针加减小整数 C+20_8,#include using namespace std; in
11、t main(void) int i,*pi; double d,*pd; pi= ,地址,1245056,1245040,1245064,1245068,指针变量,pd,pd+2,pi,pi+1,例6.7 注意指针加/减小整数去引用它 所指向的数据单元的安全性 C+20_9,#include using namespace std; int main(void) int a=11,b=22,c=33,d=44,e=55,*p= ,a,b,c,d,e,11,22,33,44,55,1,2,3,4,main() int *p1,*p2,*p,a,b;,9,*p1,不定,不定,5,scanf(%d
12、%d,p1=,p2=,p1=p2;,p2=p;, printf(na=%d,b=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2); ,补充例 输入a和b两个整数,按先大后小顺序输出a和b C+20_10,#include using namespace std; void fun(int *a,int *b,int *c) *a=*a+10; *b=*b+100; *c=*c+1000; ,补充例 让函数返回多个值 C+20_11,int main(void) int x,y,z; scanf(%d%d%d, ,3、同类型指针间的比较和相减运算,指针间的比较和相减运算主要用于指向同一数组的两个元素的两个指针之间。 (1) 指针间的相减运算 若 int a10; int *p1= 则 p2-p1=4(16),(2) 指针间的比较运算 指针间的比较运算是比较它们之间的地址大小。 如果plp2,表示pl指向下标值大的元素,p2指向下标值小的元素。 如果两个指针相等,表明它们指向同一数组元素。,C+20_12,6.1.5 指向指针变量的指针与多级指针,1、二级指针的概念 一个指针变量可以指向一个整型数据,或一个实型数据,或一个字符型数据。 而一个指针变量(指针型数据)同样具有存储空间(的地址),所以,一个指针变量也可以指向一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年财务管理部招聘面试实战模拟题及答案
- 国有银行笔试题库及答案
- 2025年政策法规解读与应对模拟题及答案面向公务员备考者
- 2025年草原监理员考试模拟题解析及答案
- 2025年建筑师执业资格考试全真模拟试题
- 2026届河南省荥阳市第二高级中学高一化学第一学期期中学业水平测试试题含解析
- 2025年高职院校财务招聘考试热点解析与备考建议
- 2025年造纸行业专业技能提升模拟题及答案
- 2025年国际贸易公司招聘笔试模拟试题及备考指南
- 2025年全面解析气象部门事业单位招聘考试内容与模拟题集合
- 综采工作面液压支架安装回撤工理论考核试题及答案
- 初中高中英语所有单词集合带音标
- 露天矿山危险源辨识(汇总)
- 放射科质控汇报
- GB/T 31091-2014煤场管理通用技术要求
- GB/T 24218.1-2009纺织品非织造布试验方法第1部分:单位面积质量的测定
- 万东GFS型高频高压发生装置维修手册
- 公寓de全人物攻略本为个人爱好而制成如需转载注明信息
- 企业经营沙盘模拟实训指导书
- 汉密尔顿抑郁量表17项
- 《现代物流管理》第一章-导论(课用)
评论
0/150
提交评论