欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《二级C语言程序设计》第8章指针.ppt

    • 资源ID:90605170       资源大小:283.16KB        全文页数:66页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《二级C语言程序设计》第8章指针.ppt

    第第8章章 指针指针 1.存储单元存储单元:构成存储单元的基本单位是字节,不同类型的存储单构成存储单元的基本单位是字节,不同类型的存储单元由数量不等的连续字节组成,计算机给每个字节一个惟一的编元由数量不等的连续字节组成,计算机给每个字节一个惟一的编号。号。2.指针指针:构成某一存储单元的连续字节的起始字节编号称为该存储构成某一存储单元的连续字节的起始字节编号称为该存储单元的地址,也称为该存储单元对应变量的指针。即:变量的指单元的地址,也称为该存储单元对应变量的指针。即:变量的指针就是变量的地址针就是变量的地址 8.1.1 8.1.1 指针的概念指针的概念如果有:如果有:int a=5;则内存情况如图则内存情况如图8-1所示。所示。a是是存储单元(即变量)的名字存储单元(即变量)的名字,5是存放在是存放在存储单元中的内容存储单元中的内容,存储单元的地址存储单元的地址是是2000。52000a2001图8-18.1.2 指针变量指针变量n指针变量指针变量:存放某一变量的地址的变量称为存放某一变量的地址的变量称为指针变量指针变量。n指针变量的一般指针变量的一般定义形式定义形式如下:如下:类型标识符类型标识符 *标识符标识符;例例:int*p;n允许指针变量在定义中初始化。允许指针变量在定义中初始化。例如:例如:int a=5,*p=&a;/*&a 是变量是变量a的地址的地址*/其示意图其示意图如图如图所示所示(图图2):n注意:此语句是将注意:此语句是将&a赋给赋给p,而不是,而不是*p。52000a20012000pint a=5,*p=&a;图8-28.1.3 指针变量的运算1赋值运算赋值运算n不能直接给一个指针变量赋一个整数不能直接给一个指针变量赋一个整数 n变量的地址变量的地址是通过对变量取地址运算得到的。是通过对变量取地址运算得到的。&变量名变量名“&”是对变量取地址运算符,其作用是取得变量所占用是对变量取地址运算符,其作用是取得变量所占用的存储单元的地址(构成存储单元的连续字节的首字的存储单元的地址(构成存储单元的连续字节的首字节编号)。节编号)。8.1.3 指针变量的运算指针变量的运算n对指针变量的赋值是将另一变量的地址赋给指针变量。对指针变量的赋值是将另一变量的地址赋给指针变量。其一般格式有如下四种:其一般格式有如下四种:指针变量名指针变量名=&变量名变量名 指针变量名指针变量名=指针变量名指针变量名 指针变量名指针变量名=指针变量名指针变量名+整型数据值整型数据值 指针变量名指针变量名=指针变量名指针变量名-整型数据值整型数据值8.1.3 指针变量的运算指针变量的运算n例如:例如:int a,i=1;int *p,*q,*m,*n;p=&a;q=p;m=p+1;n=q-i;2020a20222023202420252021&ap&aqq-1np+1m8.1.3 指针变量的运算指针变量的运算2取指针变量指向的存储单元(或变量)运算*指针数据值n如果有:int a;int *p;p=&a;n则:*p与a是相同的,表示同一个变量。可以是常量、变量或表达式 8.1.3 指针变量的运算指针变量的运算n“&”和“*”互为逆运算,但首先进行的运算是取地址,即“&”运算。n如果有:int a=3,b;int *p;p=&a;b=*p;*p=5;n则:指针变量p指向变量a;*p(即a)的值赋给b,b的值为3;将5赋给*p(即a),a的值为5。8.1.3 指针变量的运算指针变量的运算3比较运算当两个基类型相同的指针变量已被正确赋值后,可以对指针变量的值进行比较运算。如果有:int a6;int*p,*q;p=&a0;q=&a5;指针变量p、q的指向如图8-4所示。此时,对p、q进行比较运算,则有:pq、p=q、p=q的值为假;pq、p=q、p!=q的值为真。a0a2a3a4a5a1pq图图8-48.1.3 指针变量的运算指针变量的运算4减法运算两个指针变量在一定条件下,可进行减法运算。设p,q指向同一数组,则p-q的绝对值表示p所指对象与q所指对象之间的元素个数。n如果有:如果有:char a10=Hello;char*p,*q;int n;p=&a0;q=&a5;n=q-p;n指针变量指针变量p、q的指向的指向如图如图8-5所示,则:所示,则:n=5。a0a2a3a4a5a1pqHllone图8-58.1.3 指针变量的运算指针变量的运算8.1.3 指针变量的运算指针变量的运算5指针变量的运算应用举例指针变量的运算应用举例例例8.1 输入输入a和和b两个整数,按先大后小的顺序输出两个整数,按先大后小的顺序输出a和和b。#includemain()int*p1,*p2,*p,a,b;scanf(%d,%d,&a,&b);p1=&a;p2=&b;if(ab)p=p1;p1=p2;p2=p;printf(a=%d,b=%dn,a,b);printf(max=%d,min=%dn,*p1,*p2);8.2.1 指针与一维数组指针与一维数组一、一维数组与指针一、一维数组与指针n定义一维数组与指针。定义一维数组与指针。例:例:int a5,*p;则则a为首地址为首地址常量常量,其对象类型为,其对象类型为int*;a值与值与&a0的的值完全相同值完全相同若有若有p=a;/*或或p=&a0;*/则有则有2.地址等价关系地址等价关系 a+i p+i&ai&pi3.对象等价关系对象等价关系*(a+i)*(p+i)ai pi注意注意:一维指针变量可以当作一维数组名来引用对象:一维指针变量可以当作一维数组名来引用对象,如如:p=a+2;则则p0a2,p1a3,二、应用举例例例8.2用用不不同同的的方方法法对对有有10个个元元素素的的整整型型数数组组进进行行输输入入输输出。出。方法一:下标法。方法一:下标法。&aiai方法二:地址法。方法二:地址法。a+i*(a+i)方法三:引入指针变量的地址法。方法三:引入指针变量的地址法。int*p;p=a;p+i*(p+i)方法四:引入指针变量的下标法。方法四:引入指针变量的下标法。int*p;p=a;pi;方法五:指针变量发生变化的下标法。方法五:指针变量发生变化的下标法。int*p;p=a;p+*p+8.2.1 指针与一维数组指针与一维数组p+;/*相当于相当于p=p+1;*/特殊表达式:特殊表达式:*p+;和和*p-;先取用对象(先取用对象(*p),然后然后p自加减自加减1+*p;与与*+p;完全相同完全相同-*p;与与*-p;完全相同完全相同,这四种形式都是这四种形式都是p先自加减先自加减1,然后,然后再取用对象再取用对象等价于*(p+)不等价于(*p)+注意:注意:8.3.2指针与二维数组指针与二维数组 一、二维数组与指针一、二维数组与指针例例intb35;可理解为可理解为:b是数组名是数组名.b是数组首地址是数组首地址.b数组包含三个元素数组包含三个元素:b0,b1,b2;而而每个元素又是一个一维数组每个元素又是一个一维数组.则则:b&b0表数组首地址表数组首地址.*bb0&b00代表数组首元素地址代表数组首元素地址.*(b+i)bi&bi0代表第代表第i行行0列元素的地址列元素的地址.b0b1b2b00b01b02b03b04b10b11b12b13b14b20b21b22b23b24bb+1b+2则则:b&b0表数组首地址表数组首地址.*bb0&b00代表数组首元素地址代表数组首元素地址.*(b+i)bi&bi0代表第代表第i行行0列元素的地址列元素的地址.*(b+i)+jbi+j&bij第第i行行0列元素的地列元素的地址址注注:数组首地址值数组首地址值:b=*b=b0=&b0=&b00第第i行首地址行首地址:b+i=*(b+i)=bi=&bi=&bi0二维数组与一级指针变量二维数组与一级指针变量intb35,*p;一般给一般给p赋初值为数组首元素地址赋初值为数组首元素地址:p=&b00或或p=b0或或p=*b或或p=b;则则bij可用指针表示为可用指针表示为:*(p+5*i+j)或或p5*i+j列数列数b0b1b2b00b01b02b03b04b10b11b12b13b14b20b21b22b23b24bb+1b+2pp+1p+4p+5例例8.3用指向二维数组元素的指针变量处理二维数组的输入输出。用指向二维数组元素的指针变量处理二维数组的输入输出。程序一:程序一:#includemain()int a34;int*p,i,j;p=a0;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,(p+i*4+j);for(i=0;i3;i+)for(j=0;j4;j+)printf(%4d,*(p+i*4+j);printf(n);8.3.2指针与二维数组指针与二维数组 程序二:程序二:#includemain()int a34;int*p,i,j;for(p=a0;pa0+12;p+)scanf(%d,p);for(p=a0;pa0+12;p+)if(p-a0)%4=0)printf(n);printf(%4d,*p);8.3.2指针与二维数组指针与二维数组(2 2)指向一个由)指向一个由n n个元素组成的一维数组的指针变量。个元素组成的一维数组的指针变量。又称又称行指针变量行指针变量,或,或数组指针数组指针。其定义形式如下:其定义形式如下:类型说明符类型说明符 (*p)n;说明:说明:1)类型说明符是指向一维数组元素的类型。)类型说明符是指向一维数组元素的类型。2)该语句定义了一个指针变量)该语句定义了一个指针变量p。3)指针变量)指针变量p的基类型是由的基类型是由n个元素组成的一维数组类型。个元素组成的一维数组类型。行指针变量与二维数组行指针变量与二维数组(二)(二)二维数组与二维数组与行指针行指针例例:intb35;int(*p)5;则则:b是可以看作是一个二级指针常量是可以看作是一个二级指针常量;p是可以看作是一个二级指针变量是可以看作是一个二级指针变量;通常通常给给p赋值为赋值为:p=b或或p=b+i则则p每增每增1是移动到下一行。是移动到下一行。则则:bij的的 地地 址址:*(b+i)+j=bi+j=pi+j=&pij=&bij=*(p+i)+j列数列数b0b1b2b00b01b02b03b04b10b11b12b13b14b20b21b22b23b24bb+1b+2pp+1行指针变量与二维数组行指针变量与二维数组例例8.4用指向一维数组的指针变量处理二维数组的输入输出。用指向一维数组的指针变量处理二维数组的输入输出。程序一:程序一:#includemain()int a34;int(*p)4,i,j;p=a;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,(*(p+i)+j);for(i=0;i3;i+)for(j=0;j4;j+)printf(%4d,*(*(p+i)+j);printf(n);程序二:程序二:#includemain()int a34;int(*p)4,i,j;p=a;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,(pi+j);for(i=0;i3;i+)for(j=0;j4;j+)printf(%4d,pij);printf(n);行指针变量与二维数组8.3.3 指针数组n数组元素为指针类型的数组称为指针数组。数组元素为指针类型的数组称为指针数组。n指针数组的定义形式如下:指针数组的定义形式如下:类型说明符类型说明符 *标识符标识符常量表达式常量表达式;如果有:如果有:int *q3;则指针数组则指针数组q可以用图可以用图8-14所示所示 q0q1q2202020082034202020342022200820102036图8-14说明:说明:(1)类型说明符是数)类型说明符是数组元素存储的地址的组元素存储的地址的基类型。基类型。(2)“*”表示数组表示数组的元素值是地址,即的元素值是地址,即元素类型为指针类型。元素类型为指针类型。(3)标识符是指针数)标识符是指针数组的名字。组的名字。(4)常量表达式表示)常量表达式表示指针数组的大小。指针数组的大小。使用指针数组来处理二维数组。使用指针数组来处理二维数组。例如:如果有:例如:如果有:int a34;int*b3,i,j;for(i=0;i3;i+)bi=ai;则有如图8-15所示的存储关系。a23a22a21a20a03a02a01a00a13a12a11a10b0b1b2图图8-15n此时,二维数组此时,二维数组a中任一元素中任一元素aij的地址可用指针数组的地址可用指针数组b表示如下:表示如下:bi+j *(b+i)+j n相应地,二维数组相应地,二维数组a中任一元素中任一元素aij可用指针数组可用指针数组b表示为:表示为:*(bi+j)bij*(*(b+i)+j)*(b+i)j a23a22a21a20a03a02a01a00a13a12a11a10b0b1b2注意:注意:n(1)从从以以上上用用指指针针数数组组表表示示二二维维数数组组的的形形式式看看,其其用用法法与与用用数数组组指指针针(指指向向一一维维数数组组的的指指针针)相相似似,但但要要注注意意两两者者的的概概念念是是不不同同的的,指指针针数数组组是是由由多多个个元元素素组组成成的的,即即有有多多个个变变量量,指指针针数数组组名名是是一一个个地地址址常常量量,而而数数组组指指针针是是指指向一维数组的指针,是一个变量。向一维数组的指针,是一个变量。n(2)指针数组和数组指针的定义形式是不同指针数组和数组指针的定义形式是不同的:的:int*p3;定义定义p是一个指针数组;是一个指针数组;int(*p)3;定义定义p是一个数组指针。是一个数组指针。指针数组与数组指针用指针数组处理二维数组。用指针数组处理二维数组。例例8.5用指针数组处理二维数组。用指针数组处理二维数组。#includemain()int a34=1,3,5,7,9,11,2,4,6,8,10,12;int*b3,i,j;for(i=0;i3;i+)bi=ai;for(i=0;i3;i+)for(j=0;j4;j+)printf(%4d,bij);printf(n);8.3.4指针与字符串指针与字符串 一用字符指针表示字符串字符指针的定义:字符指针的定义:char*字符指针变量名字符指针变量名;例例1:#includemain()char*str=“I am happy”;printf(“%s”,str);0I am happystr二、二、字符数组与指针变量字符数组与指针变量1.赋初值赋初值staticcharstr=”Ilovechina!”;(静态或外部类静态或外部类)char*a=”Ilovechina!”;(不必要求为静态或外部类不必要求为静态或外部类)2.赋值赋值char*a;a=”Ilovechina!”;(正确正确)charstr14;str=”Ilovechina!”(错误错误)3.输入字符串输入字符串charstr10;scanf(“%s”,str);或或gets(str);(正确正确)char*a;scanf(“%s”,a);(错误错误)8.3.4 指针与字符串指针与字符串 用指针输入字符串正确的做法应是用指针输入字符串正确的做法应是:charstr10;char*a;a=str;scanf(“%s”,a);gets(a);或或a=(char*)malloc(10);scanf(“%s”,a);8.3.4 指针与字符串 输出字符串输出字符串char*s=”Iamastudent”;puts(s);或或printf(“%sn”,s);charstr=”Iamastudent!”;puts(str);或或printf(“%sn”,str);8.3.4 指针与字符串 3用字符指针处理字符串应用举例例例8.6将将字字符符串串s1从从第第m个个字字符符开开始始剩剩余余的的所所有有字字符符送送入到另一个字符串中。入到另一个字符串中。#include main()int m;char s180,s280,*p,*q;printf(input a string:n);gets(s1);printf(input start point:n);scanf(%d,&m);p=s1+m-1;q=s2;while(*p!=0)*q=*p;p+;q+;*q=0;puts(s2);8.3.4 指针与字符串 例例8.7利用字符指针数组输出多个字符串。利用字符指针数组输出多个字符串。#include main()char*s4;int i;s0=China;s1=Shanghai;s2=Beijin;s3=Wuhan;for(i=0;i4;i+)printf(%sn,*(s+i);8.3.4 指针与字符串 8.4指针与函数指针与函数 n8.4.1 指针作函数参数n函数的参数不仅可以是整型、实型、字符型等数据类型,还可以是指针类型。n指针作函数参数的作用是将一个变量的地址传送到另一个函数中。n例例8.8 用指针作为函数参数处理:输入两个整数,按先大后小的用指针作为函数参数处理:输入两个整数,按先大后小的顺序输出。顺序输出。swap(int*p1,int*p2)int t;t=*p1;*p1=*p2;*p2=t;#include main()int a,b;scanf(%d%d,&a,&b);printf(a=%d,b=%dn,a,b);if(ab)swap(&a,&b);printf(a=%d,b=%dn,a,b);通过本次函数调用,从被调用通过本次函数调用,从被调用函数中带回了两个处理结果函数中带回了两个处理结果.指针作形参指针作形参,可以带回返回值可以带回返回值 如果将swap(int*p1,int*p2)函数的定义改为以下两种形式,则函数调用形式以及结果会有什么不同?swap(int p1,int p2)int t;t=p1;p1=p2;p2=t;swap(int*p1,int*p2)int *t;t=p1;p1=p2;p2=t;函数定义和函数调用的常用形式函数定义和函数调用的常用形式 形式一:形式一:main()inta10;fun(a,10);fun(intx,intn)形式二:形式二:main()inta10;fun(a,10);fun(int*x,intn)形式三:形式三:main()inta10,*p;p=a;fun(p,10);fun(intx,intn)形式四:形式四:main()inta10,*p;p=afun(p,10);fun(int*x,intn)函数定义和函数调用的常用形式 例例8.9利利用用函函数数将将数数组组a中中的的10个个整整数按相反顺序存放。数按相反顺序存放。void inv(int x,int n)int i,j,k,t;k=n/2;for(i=0;ik;i+)j=n-1-i;t=xj;xj=xi;xi=t;#include main()int a10,i;for(i=0;i10;i+)scanf(%d,&ai);inv(,10);for(i=0;i10;i+)printf(%d,ai);例例8.10利利用用函函数数将将数数组组a中中的的10个个整整数数从从大到小进行排序。大到小进行排序。void sort(int*a,int n)int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jak)k=j;t=ak;ak=ai;ai=t;#include main()int a10,*p,i;for(i=0;i10;i+)scanf(%d,&ai);p=a;sort(p,10)for(i=0;i10;i+)printf(%d,ai);8.4.2指针函数指针函数 n一一个个函函数数可可以以带带回回整整型型值值、实实型型值值、字字符符型型值值,也也可可以以带带回回指指针针类类型型的的数数据据,即即地地址址。返返回回值值是是指指针针类类型型的函数,称为的函数,称为指针函数指针函数。n指针函数的定义:指针函数的定义:类型标识符类型标识符*标识符标识符(参数表参数表);8.4.2指针函数指针函数 例如:例如:char*copy(char*s)char*s1;s1=s;return(s1);#includemain()char a 80,*b;scanf(%s,a);b=copy(a);printf(%s,b);8.4.3函数指针函数指针 1函数的地址函数的地址函函数数在在编编译译时时被被分分配配占占用用一一段段连连续续的的存存储储单单元元,该该连连续续的的存存储储单单元元的的首首地地址址称称为为函函数数的的地地址址。在在C语语言言程程序序中,中,用函数的名字表示该函数的地址用函数的名字表示该函数的地址。例:如果有如下函数定义:例:如果有如下函数定义:int sum(int x,int y)int z;z=x+y;return(z);则函数名则函数名sum表示该函数的地址。表示该函数的地址。n2指向函数的指针变量(函数指针)指向函数的指针变量(函数指针)n将将函函数数的的首首地地址址存存入入一一个个指指针针变变量量中中,该该指指针针变变量量就就被被称称为为指指向向函数的指针变量,又称为函数指针。函数的指针变量,又称为函数指针。n函数指针的定义:函数指针的定义:类型标识符类型标识符 (*标识符标识符)();n例如:例如:int(*p)();n说明:说明:n(1)“类型标识符类型标识符”是函数指针指向的函数返回值的类型。是函数指针指向的函数返回值的类型。n(2)“标识符标识符”是函数指针(指向函数的指针变量)的名字。是函数指针(指向函数的指针变量)的名字。n(3)“(*标识符标识符)”表示该标识符是一个指针变量。表示该标识符是一个指针变量。n(4)标识符后的)标识符后的“()”表示该指针变量指向一个函数。表示该指针变量指向一个函数。8.4.3 函数指针 n函数指针的赋值(将函数指针指向某一函数):函数指针的赋值(将函数指针指向某一函数):函数指针名函数指针名=函数名函数名;n例如:例如:p=sum;n利用函数指针调用其指向的函数:利用函数指针调用其指向的函数:n(*函数指针名函数指针名)()8.4.3 函数指针 例如:例如:#includemain()int a,b,c;int sum(int,int);int (*p)();p=sum;scanf(%d%d,&a,&b);c=(*p)(a,b);printf(sum=%d,c);int sum(int x,int y)int z;z=x+y;return(z);8.5指向指针的指针指向指针的指针 8.5 指向指针的指针n存存放放另另一一指指针针变变量量的的地地址址的的指指针针变变量量,称称为为指指向向指指针针的的指针。指针。n指向指针的指针变量的定义:指向指针的指针变量的定义:类型标识符类型标识符 *标识符标识符;n例如:如果有:例如:如果有:int*p,*q,x;int*p,*q,x;q=&x;q=&x;p=&q;p=&q;则有如图则有如图8-18所示的指针指向。所示的指针指向。23pxq8.5指向指针的指针指向指针的指针 n如如果果将将二二维维数数组组的的每每一一行行的的地地址址存存储储在在一一个个指指针针数数组组中中,再再将将指指针针数数组组的的首首地地址址赋赋给给一一个个指指向向指指针针的的指指针针变变量量,则则也也可可以以使使用用指指向向指指针针的的指指针针变变量量来来处处理理二二维维数组。数组。n例如,如果有:例如,如果有:int a34;int*b3,i,j;int*p;for(i=0;i3;i+)bi=ai;p=b;n则有如图则有如图8-19所示的存储关系。所示的存储关系。a23a22a21a20a03a02a01a00a13a12a11a10b0b1b2p图8-19则则:p在使用时相当于在使用时相当于b.例例8.11利用指向指针的指针处理二维数组。利用指向指针的指针处理二维数组。#includemain()int a34=1,3,5,7,9,11,2,4,6,8,10,12;int *b3,i,j;int *p;for(i=0;i3;i+)bi=ai;p=b;for(i=0;i3;i+)for(j=0;j4;j+)printf(%4d,*(*(p+i)+j);printf(n);8.5 指向指针的指针 8.5指向指针的指针指向指针的指针 例例8.12利用指向指针的指针输出多个字符串利用指向指针的指针输出多个字符串.#include main()char*s4,*p;int i;s0=China;s1=Shanghai;s2=Beijing;s3=Wuhan;p=s;for(i=0;i4;i+)printf(%sn,pi);8.6命令行参数命令行参数 例例8.13编写一个程序,显示命令行上的所有参数。编写一个程序,显示命令行上的所有参数。#includemain(int argc,char*argv)while(argc1)+argv;printf(“%sn”,*argv);-argc;将将上上述述程程序序以以文文件件名名echo.c存存盘盘,经经过过编编译译、连连接接后后,在在命命令令行行上上输输入命令及屏幕显示结果如下:入命令及屏幕显示结果如下:C:echo China Beijin ShanghaiChinaBeijinShanghaiargv0argv1argv2argc=38.6命令行参数命令行参数 n带参数的带参数的main()的函数首部形式如下:的函数首部形式如下:main(int argc,char*argv)说明:说明:(1)第一个形参)第一个形参argc是是int类型,保存命令行中字符串的个数。类型,保存命令行中字符串的个数。(2)第第二二个个形形参参argv是是指指向向字字符符的的指指针针数数组组,保保存存命命令令行行中中给给出出的的字符串。字符串。n调用带参数的调用带参数的main()函数的命令行形式如下:函数的命令行形式如下:命令名命令名 参数参数1 参数参数2 参数参数n n注意:注意:命令名、各参数之间用空格隔开。命令名、各参数之间用空格隔开。字字符符串串的的个个数数(包包括括命命令令名名字字符符串串和和所所有有参参数数字字符符串串,即即参参数数个个数数n+1)传传递递给给main函函数数中中的的第第一一个个参数参数argc,将将命命令令行行中中的的字字符符串串(同同样样包包括括命命令令名名字字符符串串和和所所有有参参数数字字符符串串)传传递递给给main函函数数中中的的第第二二个个参参数数argv。8.7 本章考点本章考点n指针与指针变量的概念。指针与指针变量的概念。n指针变量的运算。指针变量的运算。n一维数组的地址、指向一维数组的指针及其应用。一维数组的地址、指向一维数组的指针及其应用。n二维数组的地址、指向二维数组的指针及其应用。二维数组的地址、指向二维数组的指针及其应用。n指针数组的概念及其应用。指针数组的概念及其应用。n用指针表示字符串。用指针表示字符串。n指针变量作为函数参数。指针变量作为函数参数。n指向指针的指针变量及其应用。指向指针的指针变量及其应用。n命令行参数的基本概念。命令行参数的基本概念。8.7 本章考点本章考点8.8 典型试题详解典型试题详解1对于基类型相同的两个指针变量,不能进行的运算是对于基类型相同的两个指针变量,不能进行的运算是_。A)B)=C)+D)-正确答案:正确答案:C(知识点:指针变量的运算)(知识点:指针变量的运算)试题分析:基类型相同的两个指针变量可以进行比较、赋值及相减试题分析:基类型相同的两个指针变量可以进行比较、赋值及相减运算。运算。2若有说明若有说明int n=2,*p=&n,*q=p;,则以下非法的赋值语句为,则以下非法的赋值语句为_。A)p=qB)*p=*qC)n=*qD)p=n正确答案:正确答案:D(知识点:指针与指针变量的概念、指针变量的运算)(知识点:指针与指针变量的概念、指针变量的运算)试题分析:赋值运算必须遵循类型相同或类型兼容原则。试题分析:赋值运算必须遵循类型相同或类型兼容原则。8.7 本章考点本章考点3以下程序的输出结果是以下程序的输出结果是_。main()char p=abcdefgh,r;long*q;q=(long*)p;q+;r=(char*)q;printf(%sn,r);正确答案:正确答案:efgh(知识点:指针变量的概念、用指针处理字符串)(知识点:指针变量的概念、用指针处理字符串)8.7 本章考点本章考点4设有以下程序:设有以下程序:main()int a,b,k=4,m=6,*p1=&k,*p2=&m;a=p1=&m;b=(*p1)/(*p2)+7;printf(a=%dn,a);printf(b=%dn,b);执行该程序后,执行该程序后,a的值为的值为_,b的值为的值为_。正确答案正确答案:0 7(知识点:指针与指针变量的概念、指针变量的运算)(知识点:指针与指针变量的概念、指针变量的运算)试题分析试题分析:a的值是两个指针值的值是两个指针值p1与与&m进行比较运算进行比较运算=的结果,的结果,p1的的值为值为&k,不等于,不等于&m,a的值为的值为0;b的值为的值为(*p1)/(*p2)+7,即,即k/m+7,为,为7。8.7 本章考点本章考点5若有以下定义和语句若有以下定义和语句double r=99,*p=&r;*p=r;则以下正确的叙述是则以下正确的叙述是_。A)以上两处的)以上两处的*p含义相同,都说明给指针变量含义相同,都说明给指针变量p赋值赋值B)在)在“double r=99,*p=&r;”中,把中,把r的地址赋值给的地址赋值给p所指向的存储单元所指向的存储单元C)语句)语句“*p=r;”把变量把变量r的值赋给指针变量的值赋给指针变量pD)语句)语句“*p=r;”把变量把变量r的值放回的值放回r 中中正确答案:正确答案:D(知识点:指针与指针变量的概念)(知识点:指针与指针变量的概念)8.7 本章考点本章考点6有以下程序:有以下程序:main()int a33,*p,i;p=&a00;for(i=0;i9;i+)pi=i+1;printf(%dn,a12);程序运行后的输出结果是程序运行后的输出结果是_。正确答案:正确答案:6(知识点:二维数组元素的地址、指向二维数组元素的(知识点:二维数组元素的地址、指向二维数组元素的指针变量指针变量 7下列程序的输出结果是下列程序的输出结果是_。main()char a10=9,8,7,6,5,4,3,2,1,0,*p=a+5;printf(%dn,*-p);正确答案:正确答案:5(知识点:一维数组的地址、指向一维数组(知识点:一维数组的地址、指向一维数组的指针变量)的指针变量)8.7 本章考点本章考点8有以下程序:有以下程序:main()int a3=1,2,3,4,5,0,(*pa)3,i;pa=a;for(i=0;i3;i+)if(i2)pa1i=pa1i-1;else pa1i=1;printf(%dn,a01+a11+a12);执行后输出结果是执行后输出结果是_。正确答案:正确答案:7(知识点:二维数组的地址、指向二维数组的指针变量、(知识点:二维数组的地址、指向二维数组的指针变量、数组指针)数组指针)试题分析:程序中定义了一个数组指针试题分析:程序中定义了一个数组指针pa指向二维数组指向二维数组a,paij即为即为aij。8.7 本章考点本章考点9以下程序通过函数指针以下程序通过函数指针p调用函数调用函数fun,请在填空栏内写出定义,请在填空栏内写出定义变量变量p的语句。的语句。void fun(int*x,int*y)main()int a=10,b=20;_;p=fun;p(&a,&b);.正确答案正确答案:void (*p)()(知识点:函数指针)(知识点:函数指针)试题分析试题分析:函数指针的定义形式如下:函数指针的定义形式如下:类型标识符类型标识符 (*标识符标识符)();8.7 本章考点本章考点10有以下程序段:有以下程序段:main()int a=5,*b,*c;c=&b;b=&a;程序执行程序执行c=&b;b=&a;语句后,表达式语句后,表达式*c的值是的值是_。正确答案:变量正确答案:变量a的值(知识点:指向指针的指针)的值(知识点:指向指针的指针)试题分析:程序中定义了指向指针的指针变量试题分析:程序中定义了指向指针的指针变量c来指向指针变量来指向指针变量b,指针变量指针变量b再指向整型变量再指向整型变量a,*c是取其指向存储单元所指向的是取其指向存储单元所指向的存储单元的值,即变量存储单元的值,即变量a的值。的值。8.7 本章考点本章考点11假定下列程序的可执行文件名为假定下列程序的可执行文件名为prg.exe,则在该则在该程序所在的子目录下输入命令行:程序所在的子目录下输入命令行:prg hello good后,程序的输出结果是后,程序的输出结果是_。main(int argc,char*argv)int i;if(argc=0)return;for(i=1;iargc;i+)printf(%c,*argvi);正确答案:正确答案:hg(知识点:命令行参数、指针数组)(知识点:命令行参数、指针数组)8.7 本章考点本章考点12不合法的不合法的main函数命令行参数形式是函数命令行参数形式是_。A)main(int a,char*c)B)main(int arc,char*arc)C)main(int argc,char*argv)D)main(int argv,char*argc)正确答案:正确答案:C(知识点:命令行参数)(知识点:命令行参数)8.7 本章考点本章考点

    注意事项

    本文(《二级C语言程序设计》第8章指针.ppt)为本站会员(wuy****n92)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开