《高级语言程序设计 Advanced Programming》课程教学资源(PPT课件讲稿)第8章 指针

第8章指针 Advanced programming
Advanced Programming 第8章 指针

主要内容 地址和指针的概念 变量的指针和指向变量的指针变量 数组与指针 字符串与指钋 指向函数的指针 ◆返回指针值的函数 指针数组和指向指针的指针 有关指针的数组类型和指针远算的小结 Advanced programming
Advanced Programming 主要内容 地址和指针的概念 变量的指针和指向变量的指针变量 数组与指针 字符串与指针 指向函数的指针 返回指针值的函数 指针数组和指向指针的指针 有关指针的数组类型和指针运算的小结

本章学习目标: ◆认识到用地址作为一种数据类型的重要性。 ◇理解指针包括地址和类型两种属性。 ◇掌握指针运算符&和* ◆能够通过地址引用调用在被调函数与主调 函数之间共享数据。 ◆理解指针和数组的关系。 ◆理解指向函数的指针的用法。 Advanced programming
Advanced Programming 本章学习目标: ❖认识到用地址作为一种数据类型的重要性。 ❖理解指针包括地址和类型两种属性。 ❖掌握指针运算符&和* 。 ❖能够通过地址引用调用在被调函数与主调 函数之间共享数据。 ❖理解指针和数组的关系。 ❖理解指向函数的指针的用法

8.1地址和指针的概念 内存用户数据区 2000 变量 2002 6 变量j 3010 2000 1 pointer 指针:一个变量的地址。 指针变量:存放某一变量的地址(即指针)。 Advanced programming
Advanced Programming 8.1 地址和指针的概念 内存用户数据区 变量 i 变量 j 变量 i_pointer 3 6 2000 2000 2002 3010 指针:一个变量的地址。 指针变量:存放某一变量的地址(即指针)

8.2变量的指针和指向变量的指针变量 ◆定义一个指针变量 ◆定义的一般形式:基类型*指针变量名; 基类型:用来指定指针变量可以指向的变量的类型 将决定指针移动和运算时的移动量。 ●*:表示该变量为指针类型 例 int*pI,p2; float *q static char“name; 注意: 1、int*pl,*p2;与int*p1,p2: 2、指针变量名是p1,p2不是*p1p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值 Advanced programming
Advanced Programming 8.2 变量的指针和指向变量的指针变量 ◆定义一个指针变量 ❖定义的一般形式:基类型 *指针变量名; ⚫基类型:用来指定指针变量可以指向的变量的类型。 将决定指针移动和运算时的移动量。 ⚫* :表示该变量为指针类型 例 int *p1,*p2; float *q ; static char *name; 注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值

★&与运算符: 取地址运算符 指针运算符(“间接访问”运算符) 含义:取变量的地址含义取指针所指向变量的内容 2000 整型变量i 1 pointer I pointer 2001 10 2002 &i_pointer 2000 10 2003 2004 ←一变量 i pointer 200 2000 指针变量 2006 pointer---指针变量,它的内容是地址量 1 pointer--指针的目标变量,它的内容是数据 & c1 pointer-指针变量占用内存的地址
Advanced Programming &与*运算符: 取地址运算符 含义: 取变量的地址 指针运算符(“间接访问”运算符) 含义: 取指针所指向变量的内容 …... …... 2000 2004 2006 2005 整型变量i 10 变量i_pointer 2001 2002 2003 2000 指针变量 i_pointer-----指针变量,它的内容是地址量 *i_pointer----指针的目标变量,它的内容是数据 &i_pointer---指针变量占用内存的地址 2000 10 i_pointer *i_pointer &i_pointer i

◆指针变量的初始化 一般形式:存储类型]数据类型指针名-初始地址值 int i. 赋给指针变量 int“p=&i: 不是赋给目标变量 例i 指针变量赋值 例int“t&*p=&i; int i,j; int i; int *g-p, nt *pl, * p2 1=&i;p2=& 用已初始3pl= j=6;*p2=8; Advanced programming
Advanced Programming ◆指针变量的初始化 一般形式:[存储类型] 数据类型 *指针名=初始地址值; 赋给指针变量, 不是赋给目标变量 例 int i; int *p=&i; 变量必须已说明过 类型应一致 例 int *p=&i; int i; 例 int i; int *p=&i; int *q=p; 用已初始化指针变量作初值 指针变量赋值: int i, j; int *p1, *p2; p1=&i; p2=&j ; i=3; *p1=5; j=6; *p2=8;

◆指针变量的引用 例81通过指针变量访问整型变量 #include 运行结果: a=100,b=10 void main() pl=100,*p2=10 inta,b,“pl,*p2; &affd &b=ffd a=100;b=10: pI=ffd4, p2=ffd pl=&a; p2=&b: &pl=ffds, &p2=ffda printf(“a=%d,b=%dn”,;a,b) printf(* pl=%d, *p2=d\n", *pl, *p2); ffd r 100a printf(“&a=%x,&b=%X\n”’,&a,&b); ffd 10b printf(“pl=%X,p2=%X\n”,pl,p2); ffds ffd pl printf("&p1=%x,&p2=%xIn", &pl,& p2); ffda ffd p2 Advanced programming
Advanced Programming ◆指针变量的引用 例8.1 通过指针变量访问整型变量 #include void main( ) {int a, b, *p1, *p2 ; a=100; b=10; p1=&a; p2=&b; printf(“a=%d, b=%d\ n”,a, b); printf(“* p1=%d, * p2=%d\ n”, *p1, * p2); printf(“&a=%x,& b=%x\ n”,&a, &b); printf(“p1=%x, p2=%x\ n”, p1, p2); printf(“& p1=%x, &p2=%x\ n”, &p1, & p2); } 运行结果: a=100, b=10 *p1=100, *p2=10 &a=ffd4, &b=ffd6 p1=ffd4, p2=ffd6 &p1=ffd8, &p2=ffda 100 10 ffd4 ffd6 a b p1 p2 ffd4 ffd6 ffd8 ffda

关于&和*运算符的进一步说明: 、&:优先级同为2级,结合性:从右向左。 1若已执行:inta,b,*p1,*p2: pl=&a;p2=&b;a=100;b=10; 则①&*p14>&a(p1) &*p24>&b(p2) ②p2=&pl>p2=&a 2.&am先进行&a得的地址,再对的地址进行*运算 3记单冷+:忧完级为2,结合怪从右到在1001 (p12→>a++b 2 p十一什0 &a 10 意即 pl原指向,现在指向下一个地址了 Advanced programming
Advanced Programming 关于 & 和 * 运算符的进一步说明: * 、&:优先级同为2级, 结合性:从右向左。 1.若已执行: int a, b, * p1, * p2; p1=&a; p2=&b; a=100; b=10; 则 ① &* p1 &a (p1) &* p2 &b (p2) ②p2=&* p1 p2=&a &a &b p1 p2 10 100 b a &a &a p2 p1 10 100 b a 2. * & a:先进行&a得a的地址,再对a的地址进行* 运算 即指向a地址所指向的变量,就是a ,其值是100 3. 运算符 * ,++ :优先级为2, 结合性:从右到左 (* p1)++ → a++ * p1++ → * (p1++) 意即: p1原指向a , 现在指向下一个地址了

例8.2输入a和b两个整数,用指针方法按先大后小顺序输出 #include void main Rint *pl, "p2, *p, a, b scanf(%d%d”,&a,&b) 1=ca;p2=&b: if(a<b) kp=pl; pl=p2; p2 运行情况: printf("lna=%d, b=%dn", a, b); 5,9 printf(max=%d, min=%d\n",pl,*p 2);a-5, b-9 max=9. minEs 换前换后 ffdo ffd ffd p ffd2 ffds ffd p2 fd420 fidp 只交换了指针的值, ffd65 没有交换变量的值 5 a ffd 9 Advanced programming
Advanced Programming 例8.2 输入a和b两个整数,用指针方法按先大后小顺序输出 #include void main( ) {int *p1, *p2, *p, a, b; scanf(“%d%d”,&a,&b); p1=&a;p2=&b; if(a<b) {p=p1; p1=p2; p2=p; } printf(“\na=%d, b=%d\n”, a, b); printf(“max=%d, min=%d\ n”, *p1, *p2); } 运行情况: 5,9 a=5, b=9 max=9,min=5 只交换了指针的值, 没有交换变量的值 换前 换后 ffd8 ffd6 5 5 ffd0 ffd2 ffd4 ffd8 ffd6 ffd6 ffd8 20 ffd6 9 9 p1 p2 p a b
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《C语言程序设计》课程教学资源(PPT课件讲稿)第5章 循环结构程序设计.ppt
- 广西外国语学院:《计算机网络》课程教学资源(PPT课件讲稿)第8章 DNS.ppt
- 深圳大学:《图片处理基础》课程教学课件(PPT讲稿)Poisson Image Editing.pptx
- 《PhotoshopCS2基础教程与上机指导》课程教学资源(PPT课件讲稿)第20章 Web图像与动画设计.ppt
- 广西医科大学:《计算机网络 Computer Networking》课程教学资源(PPT课件讲稿)Chapter 17 NETWORK MANAGEMENT.pptx
- 局域网基础知识及网络设备(PPT课件讲稿).ppt
- 长沙医学院:《计算机专业英语》课程教学资源_教学大纲.doc
- 郑州大学:《计算机组成原理》课程教学资源(PPT课件讲稿,共八章,任课教师:石磊).ppt
- 《数字图像处理》课程教学资源(PPT课件讲稿)第4章 图像增强.ppt
- 电子工业出版社:《计算机网络》课程教学资源(第五版,PPT课件讲稿)第8章 因特网上的音频/视频服务.ppt
- 《数字图像处理》课程教学资源(PPT课件讲稿)第8章 彩色图像处理.ppt
- 《数学建模》课程教学资源(PPT讲稿)SAS基础培训(生成SAS数据集、加工SAS数据集)Statistical Analysis System.ppt
- 《计算机系统结构》课程教学资源(PPT课件讲稿)第一章 计算机系统结构的基本概念.ppt
- 《计算机系统结构》课程教学资源(PPT课件讲稿)第八章 多计算机系统.ppt
- 《操作系统原理》课程教学资源(PPT课件讲稿)Chapter 05 并发性——互斥和同步(Concurrency - Mutual Exclusion and Synchronization).ppt
- 《计算机体系结构》课程教学资源(PPT课件讲稿)第七章 多处理机系统.ppt
- 电子科技大学:《面向对象程序设计语言C++》课程教学资源(PPT课件讲稿)第九章 多态性(主讲:丘志杰).ppt
- 《操作系统》课程教学资源(PPT课件讲稿)Chapter 03 Process Description And Control.ppt
- 《计算机系统结构》课程教学资源(PPT课件讲稿)第五章 存储系统.ppt
- 电子科技大学:《计算系统与网络安全 Computer System and Network Security》课程教学资源(PPT课件讲稿)第2章 信息安全数学基础(计算复杂性).ppt
- 《Java面向对象程序设计》课程教学资源(PPT课件讲稿)第四章 Java图形用户界面设计 4.2 AWT和Swing组件.pptx
- 江苏海洋大学(淮海工学院):《Java面向对象程序设计》课程教学资源(PPT课件讲稿)第2章 Java语言基础.pptx
- 江苏海洋大学(淮海工学院):《Java面向对象程序设计》课程教学资源(PPT课件讲稿)第4章 Java图形用户界面设计.pptx
- 《Java面向对象程序设计》课程教学课件(PPT讲稿)AWT和Swing组件.pptx
- 《Java面向对象程序设计》课程教学课件(PPT讲稿)流程控制语句.pptx
- 《Java面向对象程序设计》课程教学资源(PPT课件讲稿)第六章 Java输入输出流与文件操作.pptx
- 《Java面向对象程序设计》课程教学资源(PPT课件讲稿)第三章 Java面向对象编程.pptx
- 淮阴工学院:《数据库原理》课程教学资源(PPT课件讲稿)第3章 关系数据库的基本理论.ppt
- 大数据分析(PPT讲稿)大数据引领我们走向数据智能化时代.ppt
- 局域网的硬件设备和操作系统(PPT讲稿).ppt
- 上海交通大学:云安全(PPT讲稿)Cloud Security.pptx
- 上海交通大学:《Multicore Architecture and Parallel Computing》课程教学资源(PPT课件讲稿)Lecture 7 CUDA.ppt
- 上海交通大学:《通信网络》课程PPT教学课件(讲稿)Communication Networks - ANALYSIS OF 10G EEE PROTOCOL.pptx
- 亚马逊云计算AWS(Amazon Web Service)、Cloud Computing——Cassandra.ppt
- 《计算机图形学》课程教学资源(PPT课件讲稿)Chapter 4 Graphics Output Primitives(Part II).pptx
- 北京理工大学:《软件工程基础》课程教学资源(PPT课件讲稿)需求工程(主讲:刘驰).ppt
- 上海交通大学:Scheduling Algorithms in Heterogeneous Computing Systems.pptx
- 上海交通大学:《程序设计》课程教学资源(PPT课件讲稿)第5章 批量数据处理——数组.ppt
- 上海交通大学:《现代操作系统》课程教学资源(PPT课件讲稿)Chapter 02 进程与线程 Process and Thread.pps
- 《数据库基础与应用》课程PPT教学课件(Access案例教程)第9章 数据库语言SQL.pptx