C语言中指针的用法.ppt
《C语言中指针的用法.ppt》由会员分享,可在线阅读,更多相关《C语言中指针的用法.ppt(32页珍藏版)》请在三一办公上搜索。
1、,指 针,夏涛,5.3 指针的运算,(3)指针相减运算假设指针px和py是指向同一组数据类型相同的数据,则px-py的运算结果是两个指针间数据的个数。所以px和py之差并不是px和py两指针内所包含地址量之差,而是由如下公式计算决定:px-py=(px)-(py)/sizeof(指针的目标变量的数据类型),例:如果 px和py是指针变量 px=2048 py=1024px和py的目标变量的数据类型为double,则 px-py=(px)-(py)/sizeof(double)=(2048-1024)/8=128即px和py之间有128个double类型的数。,5.3 指针的运算,5.3.2 指
2、针的关系运算两个指向同一组相同类型数据的指针之间可以进行各种关系运算。两个指针之间的关系运算表示它们的目标变量的地址位置之间的关系。指针的关系运算应注意以下几点:两个不同数据类型的指针之间的关系运算是无意义的。指针与一般整数之间的关系运算也是无意义的。指针可以和0进行“=”或“!=”比较,用以判断其是否为空指针。,关系运算符有:小于 等于=大于等于=小于等于=不等于!=,5.3 指针的运算,例:int*px,*py;pxpypx=pypx=pypx=pypx!=py,若关系成立,表示px所指的目标变量存放的位置在py所指的目标变量存放的位置之前。,若关系成立,表示px所指的目标变量存放的位置在
3、py所指的目标变量存放的位置之后。,若关系成立,表示px所指的目标变量存放的位置在py所指的目标变量存放的位置相同。,若关系成立,表示px所指的目标变量存放的位置在py所指的目标变量存放的位置之后或相同。,若关系成立,表示px所指的目标变量存放的位置在py所指的目标变量存放的位置之前或相同。,若关系成立,表示px所指的目标变量存放的位置在py所指的目标变量存放的位置不同。,5.3 指针的运算,5.3.3 指针的赋值运算对指针可以进行赋值运算,所赋的值一定是地址量,一般不能是数据。赋值形式有以下几种:可以把一个变量的地址赋给与其具有相同数据类型的指针。例:int x,*px;px=,5.3 指针
4、的运算,其他常用的赋值运算设px和py是具有相同数据类型的两个指针,则以下赋值是合法的。px=py+n;px=py-n;px+=n;px-=n;n是地址量。对指针的目标变量的赋值对指针的目标变量所赋的值一定是数据。要注意数据类型的统一。例:int x,*p,y;p=最后y=5,返回主菜单,5.4.1 指向数组的指针5.4.2 指向数组的指针的应用,5.4 指针与数组,5.4 指针与数组,返回主菜单,5.4 指针与数组,5.4.1 指向数组的指针数组名就是数组元素的首地址,数组元素是连续存放在一片内存空间中,C语言可以用指针访问数组的元素。用指针访问数组的元素的作法是,根据前面所述的数组、指针的
5、概念,首先定义一个数组和指针并使指针指向该数组,例如:float x10,*px;px=x;px=下标法(用下标符):引用数组某元素的方法是:ai。例如:a0,a1a9。地址法:引用数组某元素的方法是:*(a+i)。例如:*(a+0),*(a+1),*(a+9)。指针法(用指针运算符):引用数组某元素的另一种方法是:*(pa+i)。例:*(pa+0),*(pa+1),.*(pa+9).用指针加下标的方法引用数组某元素:pai。例如:pa0,pa1,pa9。,5.4 指针与数组,说明:1、虽然上述的三种方法都能输出同样的结果,但它们的效率是不同的。用下标法访问数组时,是转换成地址法处理的,即先计
6、算出数组元素的地址,然后再找到它指向的存储单元,读出或写入它的值。而用指针变量指向数组元素时则不必每次计算数组元素地址。2、使用指针访问数组元素时,完全根据地址来访问,而不作“下标是否越界”的检查。3、使用指向数组元素的指针变量时,应当注意指针变量的当前值。例如:int a5;p=a;for(i=0;i5;i+)scanf(“%d”,p+);,5.4 指针与数组,int a10,*p;p=a;,2000200220042006200820102012201420162018,&a0&a1&a2&a3&a4&a5&a6&a7&a8&a9,a+0a+1a+2a+3a+4a+5a+6a+7a+8a+
7、9,p+0p+1p+2p+3p+4p+5p+6p+7p+8p+9,a0a1a2a3a4a5a6a7a8a9,p0p1p2p3p4p5p6p7p8p9,*(a+0)*(a+1)*(a+2)*(a+3)*(a+4)*(a+5)*(a+6)*(a+7)*(a+8)*(a+9),*(p+0)*(p+1)*(p+2)*(p+3)*(p+4)*(p+5)*(p+6)*(p+7)*(p+8)*(p+9),p+i a+I&ai 地址 内存 ai pi*(a+i)*(p+i),a,5.4 指针与数组,指针和数组在使用时应注意以下几点:用指针名和数组名在访问地址中的数据时,它们的表达形式是等价的,因为指针名和数组
8、名都是地址量。例如:int x10,*px=x,i;引用数组x10中的某个元素,可以这样作:xi、pxi、*(x+i)、*(px+i)它们的作用是等效的。指针名和数组名在本质上是不同的。指针是地址变量,其值可以发生变化,可以对其进行赋值和其它的运算。指针的以下运算是合法的:int x10,*px,n;px=x;px+;px-;px+=n;,5.4 指针与数组,数组名是地址常量,不能对其进行赋值和其它运算。下面的操作是非法的:int x10,b=2;x+;x-;x=b;指针在使用前必须赋初值,而数组名不需要赋初值。,5.4.2 二维数组的指针表示方法一个二维数组可以认为由若干个一维数组所组成,其
9、中每一个一维数组包含若干个元素。例:int a33;a 是二维数组,共有9个元素(3 3=9),它们是:a00,a01,a02,a10,a11,a12。a20,a21,a22。其全部元素数值均为 int 型。,5.4 指针与数组,分析二维数组名a和a0、a1、a2的关系数组名a就是数组的起始地址。a+1是在a的基础上加上一行的字节数。一个二维数组可以认为由若干个一维数组组成。对数组名a而言,它的每一个“元素”是一行而不是一个基本元素,因此a0、a1、a2只是一个地址。它们代表的是每一行起始元素的地址,也就是每行的第一列元素的地址。,5.4 指针与数组,a+0,二维数组的地址有行地址和列地址的区
10、别,那么如果设指针变量,也应该确定是指向行还是指向列,二者不能混淆。,#include“stdio.h”main()static int a35=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;printf(%d,%d,%dn,a,a+1,a+2);printf(%d,%d,%d,%dn,*a,*a+1,*a+2,*a+3);printf(%d,%d,%d,%dn,*(a+1),*(a+1)+1,*(a+1)+2,*(a+1)+3);printf(%d,%d,%d,%dn,*(a+2),*(a+2)+1,*(a+2)+2,*(a+2)+3);printf(%d,%d,%
11、dn,运行程序,404,414,424(第0,1,2行的行地址)404,406,408,410(第0行的4个元素的地址)414,416,418,420(第1行的4个元素的地址)424,426,428,430(第2行的4个元素的地址)404,414,424(第0,1,2行的行地址)404,406,408,410(第0行的4个元素的地址)404,406,408,410(第0行的4个元素的地址)404,414,424(第0,1,2行的行地址)8,8,8(第1行第2列元素的值),12-3,例:5-7(此例中没有应用指针变量)把数组x 的数据复制给数组y。,main()int x5=1,2,3,4,5;
12、int y5,i;printf(nx5=);for(i=0;i5;i+)printf(%3d,*(x+i);for(i=0;i5;i+)yi=xi;printf(ny5=);for(i=0;i5;i+)printf(%3d,*(y+i);,运行程序,x5=1 2 3 4 5y5=1 2 3 4 5,main()int y5,x5=1,2,3,4,5;int*px=x,*py=y,i;printf(nx5=);for(i=0;i5;i+)printf(%3d,*(px+i);for(i=0;i5;i+)=;printf(ny5=);for(i=0;i5;i+)printf(%3d,*(py+i)
13、;,例:5-8(此例中应用了指针变量),*(py+i)=*(px+i),12-7,字符串指针 字符串指针的应用,5.5 字符指针和字符串,5.5 字符指针和字符串,返回主菜单,5.5 字符指针和字符串,5.5 字符指针和字符串 类型为char的指针称为字符指针。字符指针是C语言中常用的指针类型,几乎所有字符串操作都是通过字符指针来实现的。一般情况下,字符指针都是指向字符串,所以字符指针也称为字符串指针。字符串指针(1)字符串指针。字符串指针是指指向字符串的指针。例如:char str20,*ps;ps=str;(2)在指针定义的同时进行初始化 例如:char str20=“program”;c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 指针 用法
链接地址:https://www.31ppt.com/p-6503752.html