C程序设计语言第六讲指针

上传人:沈*** 文档编号:96696474 上传时间:2022-05-26 格式:DOC 页数:17 大小:286KB
返回 下载 相关 举报
C程序设计语言第六讲指针_第1页
第1页 / 共17页
C程序设计语言第六讲指针_第2页
第2页 / 共17页
C程序设计语言第六讲指针_第3页
第3页 / 共17页
点击查看更多>>
资源描述
扌旨针/、2013-7-81.描针的基本枇念2. 指针矍变受 变受的走义 滞针的基本操作 滞针变受的使用3. 指针數俎4. 48也_西救5. 宿舒与典、对象6. 桔针与学符串7. String类x2013-7-8本章难点指向多维数组的指针多级指针各指针类型作为函数参数指针与函数的关系J用函数指针变量调用函数2013-7-8丽仓対套経序谡针第一牟北树的基本統含 X1 内存单元:在计算机中,所有的数据都是存放在存储器 中的。一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占4 个单元,字符量占1个单元等。2地址:为了正确地访问内存单元,必须为每个内存单元 编上号。根据一个内存单元的编号即可准确地找到该内存 单元。内存单元的编号也叫做地址。既然根据内存单元的 编号或地址就可以找到所需的内存单元,叮以说地址指 向该内存单元,因此通常把地址形象化地称为指针。那 么指针的定义:是一种数据类型,指存放数据的存储地3变量与地址:程序中可以用变量來存放各种 数据,因此每个变量都需要分配连续的内存单 元。如程序中有如下定义语句:int i=5,j=3;float f;给它分配的内存单元如右下图:整型变:fti轅型变fluA 小结论当一个变量只占用 | 一个内存单元时,内存单元的地址就是变量的地址; 当变量占用连续的若干个 内存单元时,最前面一个 单元的地址就是该变量的 地址。2013-7-8丽命対專経彷超讨4 直接存取与间接存取对变量操作时不需知道它的地址(变量与 地址的联系由编译程序实现),对变量的存 取就是对相应存储单元的存取,这就是“直 接心取”方式;指针变量的内容是另一个变 量的地址,称p指向a。通过指针变量p存取变 量a的存取方式叫“间接存取” oX2013-7-8第二牟怎树空麦蚤I指针变量:指针变量是存放力一个变屋的地址的变量。它和 晋通变量一样占用一定的存储空间。它与普通变量不同之: 指针的存储空间里存放的不是普通的数据,而是一个地址。指针在程序中使用时,必须预先在数弼说明部分说明。在 指针说明的同时也可以进行初始化。621定义(指针的说明)I1指针的说明指出了指针的存储类型和数据类型,它的一般形式如下:存储类型数抓啖型与&关系:假设指针 p为指向交量X,则: p=&x;x=*p; p=&*p;x=*&x指针变-I:.名;j例如:int *px; char *name; static int *pa;上面定义了名字为px, name和pa的三个不同类型的指针。 kx、2013-7-8丽荷対專径存谡讨6.2.2指针的基本操作两个有关的运算符:(1)&:取地址运算符(2)*:指针运算符(或称“间接访问”运算符)p=&i; printfC%d,*p); printfC%d,i);将打印相同的结果 1 0.例如,& a为变量a的地址,* p为指针变量p所指向的变量. 使用*卩与定义木p不同,定义时,int*p中的“*”不是 运算符,而在程序执行语句中,引用“*p”,其中的 “*”是一个指针运算符,例如:6.2.3初殆化如弓)用指针在说明的同时,也可以被赋予初值,称为指针的 初始化。由于指针是保持地址的变量,所以初始化时賦予 它的初值必须是地址量。指针初始化的一般形式是:存储类型数据类型*指针名=初始地址值;例如:int *pa=&a;它把变量a的地址作为初值赋予了 int型指针pa。需要注意的是,从表面上看,似乎把一个初始地址量 赋予给了指针的目标变量*pa。其实不然,初始化形式中 *pa=&a不是一个运算表达式,这里是一个说明性语句。所 以,读者应该记住,这里的初始地址值是赋给指针变量, 而不是赋给目标变量。4谡针3、指针变量的关系运算两个指向同一组类型相同的数据的指针之间可以 进行各种关系运算,运算结果为逻辑值,满足关系时, 结果为1 (真),否则为0 (假)。如int a10,*p,*q; p=&a0; q=&a3;则pvq 结果为1 ;p+3 = = q 结果为1 ;p&2结果为0指向不同数据类型的指针之间的关系运算是没有意义的。 指针与一般整数变量之间的关系运算也是无意义的。 但是指针可以和零之间进行等于或不等于的关系运算, 即:p= =0或p!=0,它们用于判断指针p是否为一个空 指针。624pl62指向常量的指针 常指针指向常量的常指针2013-7-8丽命対套経存谡针6.3扌旨针与数组6.3.1指针和数组的关系:指针和数组有着密切的关系,任何能由数组下标 完成的操作也都可用指针来实现,但程序中使用指针 可使代码更紧凑、更灵活。可以设置指针变量指向数 组或数组中的元素。如:int a10, *p;可以使整型指针p指向数组中任何一个元素,假定 给出赋值运算p=&a0;此时,p指向数组中的第0号 元素,即a0,指$十变量p中色含了数组元素a0的应址, 由于数组元素在内存中是连续存放的,因此,莪们就 可以通过指针变量p及其有关运算间接访问数组中的 任何一个元素。根据地址运算规则,a+1为al的地址, a+i就为ai的地址。在定义指向数组的指针时,有下列几种表示方式:,1(1 ) int a10J, *p = &a0;( 2 ) int a10, *p = a; j(3 ) int a101, *p; p = a ;( 4 ) int a10, *p; p = &a0; J(5 ) int a10J;int *p =:&a0;fl用指针表示数组元素的地址和内容的几种形式:(1) . p+i和a+i均表示ai白勺地址,或者讲,它们均指向数组笫i号元素,即指向ai。I(2) . *(p+i)和*(a+i)都表示p+i和a+i所指对象的内容,即为ai。(3) .指向数组元素的指针,也可以表示成数组的形式,也就是说,它允许指针变量带下标,如pi与*(p+i)等 价。J假若有:p=a+5;则p2就相当于*(p+2),由于p指向a,所以i p2就相当于a7o而p卜3就相当于*(p3),它表示a2o I2013-7-8丽命対套程存谡针6.32通过扌旨针弓I用数组元素x戸165程序63, 6-46.3.3扌旨向多维数组的扌旨针2013-7-8丽命対專経存谊讨634扌旨针数组和多级扌旨针当数组的元素类型为某种指针类型时,该数组就 称为指针数组。即该数组中每个元素都是指针 变量。指针数组的定义形式为:类型标识*数组名整型常量表达式;例如:int *a10;定义了 一个指针数组,数 组中的每个元素都是指向整型量的指针,该数 组由10个元素组成,即a0, al, a2,,a9, 它们均为指针变量。a为该指针数组名,和数 组一样,a是常量,不能对它进行增量运算。a为 指针数组元素a0的 地址,a+i为ai的地址,*a 就是a0, *(a+i)就是ai。 X2013-7-8当指针变量PP所指的变量ip又是一个指针时,PP是一种指向指针的指 针,此时称指针变量PP是一种多级指针。定义指向指针变量的指 针变量的一般形式为:类型说明符初变量名;该一般形式说明以下几个方面的内容:首先定义变量为指针变量,其 次是该变量能指向一种指针对象,最后是被指向的指针对象能指 向的对象的类型。例如int *pp, *ip, i; ip = &i;pp = &ip;定义说明pp是指向指针的指针变量;它能指向的是这样一种指针对指针变量ip,ip指向整型变量i。象,该指针对象是能指向int型的指针变量。如上述代码让pp指向X2013-7-8丽命対套您存谡诂2013-7-8例题:输入5个字符串,从中找出最大的字符串并输山。#include main()char a580,*p5,*q;*max; int i;for(i=0;iv5;i+) pij=ai;for(i=0;i5;i+) gets(pi); max=&p0;int *p;for(i=0;i5;i+,q+)if(strcmp(*max,*q) 0 max=q; 6.4猜豺与晶做6.4.1北树卷屢仔彩晶做参做(p171)在函数中讲到的交换两个数的值。2013-7-8丽命対專程存谡讨6.4.2北豺也做的北树参l(p173)x6.4.3茴树仔彩晶做的笆嶷理(p175) 有若干个学生的成绩(4门),要求在用户输入学生序号后能输出该学生的全部成绩1#include Ivoid main()1 float score4J=60,70,80,80,56,89,67,88,34,78,90,66;float *search(float (*pointer)4 Jnt n);函数search被定义为指针函数,形参pointer是指向包含4个 元素的一维数组的指针变量。1float *p; int i,m;coutnEnter the number of student:11; cinm;IcoutMThe scores of No.HmHare:H;Ip=search(score9m);Ifor(i=0;i4;i+) coutH ”vv*(p+i);coutendl;1xl2013-7-8丽命対專経存谡针Xfloat *search(float (*pointer)4?int n)float *pt;pt=* (pointer+n);return(pt);X2013-7-86.5指针与类、对象1类的指针变量2对象的指针3.this指针2013-7-86.6扌旨针与字符串x字符串常量是由双引号括起来的字符序列,C+语言 中操作一个字符串常量的方法有:(1) 把字符串常量存放在一个字符数组之中,例如: char s=Ha string;数组s共有9人元素所组成,其中s中的内容是、0鳥实际上,在字符数组定义的过程中, 编译程序直接把字符串复写到数纽中,即对数组s初始 化。(2) 用字符指针指向字符串,然后通过字符指针来访问 字符串存贮区域。当字符串常量在表达式中出现时,根 据数组的类型转换规则,它被转换成字符指针。因此, 若我们定义了 一字符指针cp: char *cp;于是可用:cp “a string;使cp扌旨向字符串常量中的第0号字符a,以 启我们可逋过cp乗访问这一存贮区域,如叱卩或cp0就 是字符a,而cpi或*(cp+i)就相当于字符串的第i号字符。 SX2013-7-8丽命対專経4谡诂2013-7-8XXXbi = anm+i; bi = ai-m; bi = ai; printf(H%d ai);例:使用字符指针处理字符串#include main()static char str =Hprogramu; char *ps;ps=str;while(*ps !=7(V)cout*ps; ps+;) coutendl;运行结果program解法1:#include Mstdio.hHmain() int a8()J,b80,m,nu,*p;printf(Hplease enter the number of arrays elementsnH);scanf(H%d&n);printf(nplease enter the elements of the arrayXn”);for(i = 0; i n; i+) scanfC%d”,&ai);printf(Hplease enter the number of swappedn”); scanfT%d”,&m);for(i = 0; i m; i+)for(i = m; i n; i+)for(i = 0; i n; i+)for(i = 0; i n; i+)2013-7-8
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!