7.2指针变量的应用(课件)-《 C语言程序设计》同步教学(电子工业出版社)

2024-08-11
| 23页
| 59人阅读
| 12人下载
普通

内容正文:

第七章 程序的性能优化--指针 1 CONTENTS 目录 01 02 为什么使用指针 什么是指针 03 指针变量的应用 04 指针变量的运算 05 使用指针访问一维数组中的元素 CONTENTS 目录 06 07 字符型指针引用字符串 使用指针访问二维数组中的元素 08 指针数组与指针的指针 09 使用指针作为函数的参数 10 使用指针作为函数的返回值 11 使用指针调用函数 C语言 知识树 My First Template 指针变量的应用 C语言程序设计 5 C语言 本次任务 利用指针变量交换两个数的大小。 C语言程序设计 –指针变量的应用 My First Template C语言 指针变量的声明 一般形式: 数据类型 *指针名; 指针的目标变量的数据类型 合法标识符 表示定义指针变量 不是‘*’运算符 例: int *p1,*p2; float *q ; char *t; 注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值 5、指针值为NULL的指针称为空指针,这意味着,不指向任何地址 C语言程序设计 –指针变量的应用 My First Template C语言 例 int i; int *p=&i; 变量必须已说明过 类型应一致 例 int *p=&i; int i; 例 int i; int *p=&i; int *q=p; 用已初始化指针变量作初值 一般形式: 数据类型 *指针名=初始地址值; 指针变量的初始化 3 变量i 2018 p *p i *p &i p i=3; *p=3 C语言程序设计 –指针变量的应用 My First Template 100 num 2018 p 内存 C语言 int num, *p; p = &num; *p=100; 指针 2018 & 取地址符 指针变量引用 C语言程序设计 –指针变量的应用 My First Template C语言 例 main( ) { int i=10; int *p; *p=i; printf(“%d”,*p); } 危险! 例 main( ) { int i=10,k; int *p; p=&k; *p=i; printf(“%d”,*p); } …... …... 2000 2008 2012 整型变量i 10 指针变量p 2004 随机 指针变量引用 指针变量必须初始化才能引用 C语言程序设计 –指针变量的应用 My First Template C语言 指针变量的命名规则和其他变量的命名规则一样 指针不能与现有变量同名 指针可存放 C 语言中的任何基本数据类型、数组和其他所有高级数据结构的地址 若指针已声明为指向某种类型数据的地址,则它不能用于存储其他类型数据的地址 应为指针指定一个地址后,才能在语句中使用指针 指针的特点 C语言程序设计 –指针变量的应用 My First Template C语言 指针 #include <stdio.h> void main() { int var = 100; int *ptr_var; ptr_var = &var; printf(" var 的值是: %d", var); printf(" var 的内存地址是: %x", &var); printf(" 指针 ptr_var 的地址是: %x ", &ptr_var); printf(" var 的值是: %d", *ptr_var); printf(" var 的地址是: %x ", ptr_var); } 内存 var ptr_var 100 2018 var的值是:100 var 的内存地址是:2018 2018 2035 指针ptr_var的地址是:2035 var的值是:100 var的地址是:2018 例子 C语言程序设计 –指针变量的应用 My First Template C语言 #include <stdio.h> void main() { int x,y,*px,*py,t; printf("请输入要交换房间号:"); scanf("%d,%d",&x,&y); px=&x; py=&y; t=*px; *px=*py; *py=t; printf("第一间房=%d 第二间房=%d ",*px,*py); } 任务实现 C语言程序设计 –指针变量的应用 My First Template 指针变量的运算 C语言程序设计 14 C语言 赋值运算:指针变量的赋值运算有以下几种形式。 指针变量初始化赋值,前面已作介绍。把一个变量的地址赋予指向相同数据类型的指针变量。 例如: int a,*pa; pa=&a; /*把整型变量a的地址赋予整型指针变量pa*/ 把一个指针变量的值赋予指向相同类型变量的另一个指针变量。 如: int a,*pa=&a,*pb; pb=pa; /*把a的地址赋予指针变量pb*/ 指针变量的运算 C语言程序设计 一指针变量的运算 My First Template C语言 由于pa,pb均为指向整型变量的指针变量,因此可以相互赋值。 把数组的首地址赋予指向数组的指针变量。 例如: int a[5],*pa; pa=a; (数组名表示数组的首地址,故可赋予指向数组的指针变量pa)也可写为: pa=&a[0]; 当然也可采取初始化赋值的方法: int a[5],*pa=a; 指针变量的运算 C语言程序设计 一指针变量的运算 My First Template C语言 int x,*p,*q; p=&x; q = p; 100 x ED2A p q ED2A ED2A int a[5],*pa; pa=a; a[0] a[1] a[2] a[3] a[4] 23 43 11 50 46 pa ED2A ED2E ED31 Ed35 Ed39 ED2A 指针赋值运算 C语言程序设计 一指针变量的运算 My First Template C语言 加减算术运算 对于指向数组的指针变量,可以加上或减去一个整数n。 设pa是指向数组a的指针变量,则pa+n,pa-n,pa++,++pa,pa--,--pa运算都是合法的。 指针变量加或减一个整数n的意义是把指针指向的当前位置向前或向后移动n个位置。应该注意,数组指针变量向前或向后移动一个位置和地址加1或减1在概念上是不同的。因为数组可以有不同的类型,各种类型的数组元素所占的字节长度是不同的。 如指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。 指针变量的运算 C语言程序设计 一指针变量的运算 My First Template C语言 指针算术运算 int *p,a [8]; p = &a [0]; p++; 使用递增/递减运算符(++ 和 --)将指针递增或递减 内存 a [0] a [1] a [2] a [3] a [4] a [5] a [6] a [7] 11 22 33 44 55 66 77 88 一个类型为 T 的指针的移动, 以 sizeof(T)为移动单位。 C语言程序设计 一指针变量的运算 My First Template C语言 例如: int a[5],*pa; pa=a; /*pa指向数组a,也是指向a[0]*/ pa=pa+2; /*pa指向a[2],即pa的值为&pa[2]*/ 指针变量的加减运算只能对数组指针变量进行,对指向其它类型变量的指针变量作加减运算是毫无意义的。 指针变量的运算 C语言程序设计 一指针变量的运算 My First Template C语言 p = &a[0]; p = p+ 4; printf(“%d”,*p); p= &a[5]; p = p - 2 ; printf(“%d”,*p); 55 44 内存 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] 11 22 33 44 55 66 77 88 指针算术运算 将指针加上或者减去某个整数值 C语言程序设计 一指针变量的运算 My First Template C语言 两个指针变量之间的运算:只有指向同一数组的两个指针变量之间才能进行运算,否则运算毫无意义。 两指针变量相减:两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两个指针值(地址)相减之差再除以该数组元素的长度(字节数)。例如pf1和pf2是指向同一浮点数组的两个指针变量,设pf1的值为2010H,pf2的值为2000H,而浮点数组每个元素占4个字节,所以pf1-pf2的结果为(2010H-2000H)/4=4,表示pf1和 pf2之间相差4个元素。两个指针变量不能进行加法运算。 两指针变量进行关系运算:指向同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的关系。 例如: pf1==pf2表示pf1和pf2指向同一数组元素; pf1>pf2表示pf1处于高地址位置; pf1<pf2表示pf2处于低地址位置。 指针变量的运算 C语言程序设计 一指针变量的运算 My First Template C语言 指针变量还可以与0比较。 设p为指针变量,则p==0表明p是空指针,它不指向任何变量; p!=0表示p不是空指针。 空指针是由对指针变量赋予0值而得到的。 例如: #define NULL 0 int *p=NULL; 对指针变量赋0值和不赋值是不同的。指针变量未赋值时,可以是任意值,是不能使用的。否则将造成意外错误。而指针变量赋0值后,则可以使用 指针变量的运算 C语言程序设计 一指针变量的运算 My First Template $$

资源预览图

7.2指针变量的应用(课件)-《 C语言程序设计》同步教学(电子工业出版社)
1
7.2指针变量的应用(课件)-《 C语言程序设计》同步教学(电子工业出版社)
2
7.2指针变量的应用(课件)-《 C语言程序设计》同步教学(电子工业出版社)
3
7.2指针变量的应用(课件)-《 C语言程序设计》同步教学(电子工业出版社)
4
7.2指针变量的应用(课件)-《 C语言程序设计》同步教学(电子工业出版社)
5
7.2指针变量的应用(课件)-《 C语言程序设计》同步教学(电子工业出版社)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。