ImageVerifierCode 换一换
格式:DOC , 页数:39 ,大小:543.54KB ,
资源ID:9836357      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9836357.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(2022年福建省计算机二级C语言复习经典资料.doc)为本站上传会员【w****g】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

2022年福建省计算机二级C语言复习经典资料.doc

1、C语言最重要知识点复习资料! 总体上必要清晰: 1)程序构造是三种:顺序构造 ,循环构造(三个循环构造),选用构造(if 和 switch) 2)读程序都要从main()入口,然后从最上面顺序往下读(遇到循环做循环,遇到选用做选用)。 3)计算机数据在电脑中保存是以二进制形式. 数据存储位置就是它地址. 4)bit是位,是指为0或者1。 byte 是指字节,一种字节 = 八个位. 5) 一定要记住 二进制 如何划成 十进制。 概念常考到: 1、编译预解决不是C语言一某些,不再运营时间,占编译时间。C语言编译程序称为源程序,它以ASCII数值存储在文本文献中。 2、每个C语言程

2、序中main 函数是有且只有一种。 3、在函数中不可以再定义函数。 4、算法是一定要有输出,她可以没有输入。 5、break可用于循环构造和switch语句,continue只用于循环。 6、逗号运算符级别最低。 第一、二章 C语言基本及简朴程序设计 1. c语言由什么构成;(函数:一种C语言程序由一种至多种函数构成,) 2. main()是主函数,该函数既是入口又是出口(一种入口,一种出口) 3. 数据类型:基本数据类型(整型,字符,实型,枚举型),占用内存字节数,体现范畴 4. 常量:123,0101(没有8和9),0x41,'1',-2.30,-1.2E+5 5.

3、 在一种字节内,字符通整型,整型通字符 6. 合法顾客标记符考察: 合法规定是由字母,数字,下划线构成,并且第一种必要为字母或则是下划线。 核心字不可以作为顾客标记符号。main  define  scanf  printf 都不是核心字。困惑你地方If是可以做为顾客标记符。由于If中第一种字母大写了,因此不是核心字。 7. 实型数据合法形式:考试口诀:e前e后必有数,e后必为整数。. 2.333e-1 就是合法,且数据是2.333×10-1。 8. 字符和字符串数据合法形式::    '1' 是字符占一种字节,"1"是字符串占两个字节(具有一种结束符号)。 '0' ASCII

4、数值体现为48,'a' ASCII数值是97,'A'ASCII数值是65。 9. 转义字符考察(p28):转义符\:'\n', '\0', '\ddd', '\xdd'等 10. 强制类型转换:   一定是 (int)a 不是  int(a),注意类型上一定有括号。    注意(int)(a+b)和(int)a+b 区别。 前是把a+b转型,后是把a转型再加b。  11. 自加、自减体现式:假设a=5,++a(是为6), a++(为5); 运营机理:++a 是先把变量数值加上1,然后把得到数值放到变量a中,然后再用这个++a体现式数值为6,而a++是先用该体现式数值为5,然后再把

5、a数值加上1为6,再放到变量a中。 进行了++a和a++后在下面程序中再用到a话都是变量a中6了。 考试口诀:++在前先加后用,++在后先用后加。 12. 逗号体现式:优先级别最低 ;体现式数值逗号最右边那个体现式数值。如(2,3,4)体现式数值就是4。 13. 位运算考察:口诀:先转二进制再运算 总解决措施:(先把十进制变成二进制再变成十进制)。 例1: char a = 6,b; b = a<<2;  这种题目计算是先要把a十进制6化成二进制,再做位运算。 例2: 在没有舍去数据时候,<<左移一位体现乘以2;>>右移一位体现除以2。 14. % 符号两边规定是整数。不是整数

6、就错了。  15. 变量:变量命名规则满足标记符命名规则,区别大小写,核心字(p7)除外,变量定义一般都要放在函数或程序开头位置(即先定义后使用) 16. 分号:体现一种语句结束 17. 变量定义:类型名 变量名列表;(不同类型要写成两句),定义时候给值成为变量初始化,初始化时候不能连等(如 int a=b=c=1;是错! int a,b,c;a=b=c=1;是对)。 18. 变量赋值:变量名=体现式 或 变量名复合赋值运算符体现式 (复合赋值运算符:+=,*=,^=,...),如:xyz+2=c行吗?不行(赋值体现式左边只能是变量)!赋值时候可以连等。 19. 输入一种字符:x=g

7、etchar(),putchar(x),有这两个函数及FILE时一定要加上 #include //原则输入输出头文献涉及 20. getch(),体现暂停程序运营,可直接查当作果,否则运营完后不显示成果(需按ALT+F5)。 21. printf("xxxxxxxxxxxxxxx"); 或 printf("格式控制符",变量列表);变量列表不加& 22. scanf("格式控制符",地址列表), 地址列表可为数组名、指针变量名及一般变量名(一般变量名前要加加&)。 23. printf("%m.nf",32.6789) 24. scanf格式控制符中,除了逗号,一

8、般不加其她字符;一定要记住,有逗号时输入要加逗号,否则:数据用空格隔开,字符连着输入; 没有"%m.nf"写法,只有"%mf"写法, float型用"%f",double型用"%lf", long double用"%Lf" 25. 不同类型数值型数据进行混合运算 不同类型数值型数据进行混合运算时, 先要把低数据类型向高数据类型转换, 成为同一类型后才进行运算。 横向箭头体现必要进行转换。 逗号运算符是最低运算符 常量不能++、--; 例:b=(a=1,a++,a++), 又例:b=(a=2)+(a=3), 又例:a=1;b=(++a)+(++a) =与==区别(

9、赋值和等号) 26. 在C语言中,对于逻辑运算,非零数(不管实数还是整数)都觉得是真,真就是 1,假就是0; 27. 关系运算成果是逻辑值(真为1假为0)。 28. 运算符: 运算符优先序(p246):成单算移有关,异或逻条赋逗。 运算符结合性(p246):条件、单目、赋值运算符。(printf输出也是自右而左运算) 『所有运算符』 成员运算:("()",[ ],->,构造体成员.) 单目运算:(!,-,++,--,取值*,取址&,位取反~) 算术运算:(*,/,%)级别高于(+,-) 位移运算:(<<,>>) 关系运算:(>,>=,<,<=)级

10、别高于(==,!=) 位与运算:(&) 位异或运算:(^) 位或运算:(|) 逻辑运算:(&&)级别高于(||) 条件运算:(?:) 赋值算:(=,+=,... ,<<=,>>=,&=,|=,^=) 逗号运算:(,) 例如.如下程序运营成果是 struct st { int n; float x; }*p; void main() { struct st arr[3]={{10,5.6},{12,7.1},{14,6.7}}; p=arr; printf(“

11、d \n”,++p->n); p++; printf(“%d,%.2f \n”,p->n,p->x); } A) 12 B) 11 C) 11 D)12 12,7.10 10,5.60 12,7.10 14,6.70 第三、四章 选用和循环构造 1. C程序一般采用自顶向下编写格式,模块化(函数) 2. C程序构造有三种:顺序,选用(分支),循环 3. { }:用在函数,或复合语句 4. 分支构造(或选用构造)[if构造和switch构造] ①. if分支构造 单分支: if(体现式) 语句;或i

12、f(体现式) {语句组} 双分支: if(体现式) 语句1; else 语句2; 多分支if: if(体现式1) 语句1; else if(体现式2) 语句2; ... else if(体现式n-1) 语句n-1; else 语句n; ②. 多分支switch: switch(x) { case x1:语句1;[break;]

13、 ... case xn:语句n;[break;] default:语句; [break;] } 例:main() { int c; while((c=getchar())!= '\n') { switch(c-'2') { case 0 : case 1 :putchar(c+4); case 2 :putchar(c+4);break; case 3 :putchar(c+3); default:putchar

14、c+2);break; } } printf("\n"); } 当输入:247<回车>,程序输出成果是( )。 (A) 689 (B) 6689 (C) 66778 (D) 66887 switch总结: l 其语义是:先计算出体现式值,用此值与哪个case后常量体现式值相一致,则执行那个case后语句组,如果语句组后有break语句则直接退出switch构造,如语句组执行后没有break语句则继续执行后续case后语句组,直到遇到break语句退出switch构造,如没有break语句则会执行后续所有case或default后语句组再退出

15、switch构造。 l 若计算出体现式值与case后所有常量体现式值都不同则只执行default及之后语句组始终执行到最后(若遇break则终结退出switch构造),如没有default语句则直接退出switch构造。 5. 循环语句: (1) for(体现式1;体现式2;体现式3) 或 for(体现式1;体现式2;体现式3) { 循环体语句组; 循环体语句; ... [break;] /*用于结束当层循环,跳到当层循环背面语句。*/

16、 ... [continue;] /*用于结束当次循环,跳过当次循环背面语句,进入下次循环。*/ ... } (2) while(体现式) while(体现式) { 循环体语句组; 循环体语句; ... [break;] ... [continue;] ... }

17、 (3) do { 循环体语句组; ... [break;] ... [continue;] ... }while(体现式); 例: for (i=1;i<=10;i++) for (i=1;i<=10;i++) { { if ( i%2==0 ) break;

18、 if ( i%2==0 ) continue; printf(“%d”,i); printf(“%d”,i); } } 6. 循环嵌套:从外循环进来,内循环结束后,再到外循环,如此反复,直到外循环结束) x=0; 或 x=0; for(i=1;i<=2;i++) for(i=1;i<=2;

19、i++) for(j=1;j<=i;j++) { j=1; x+=i*j; while(j<=i) { x+=i*j;j++; } } 7. bre

20、ak可用于switch和循环语句,一种break只退出一层;而continue只对循环有效 8. 记住:质数判断,斐波那契数列,辗转相除法,求数列和(有正符号如何解决?置标志位) 循环总结: • for 循环与 while 循环类似,属于先判断后执行;do while,属于先执行后判断 • for 语句中有三个体现式:体现式1通常用来给循环变量赋初值;体现式2一般是循环条件;体现式3用来更新循环变量值 • for 语句中各个体现式都可以省略,但要注意分号分隔符不能省略 • 如果省略体现式2和体现式3需要在循环体内设法结束循环,否则会导致死循环 • break 语句用在循环中时,

21、可以直接终结目前循环,将控制转向循环背面语句 • continue 语句作用是跳过循环体中剩余语句而执行下一次循环 • 嵌套循环时,必要将被嵌套循环语句完整地涉及在外层循环循环体内 第五章 函数 1. 系统函数:数学类函数(math.h),输入输出函数(stdio.h),字符串类函数(string.h) 2. 自定义函数:格式 类型名 函数名(形式参数列表) { 函数体 } 3. 不写函数类型名默觉得整型 4. 如果函数类型名为void体现无返回值函数(不写return) 声明 5. 如果调用函数写在被调函数之前,且被调函数类型名不是整型(或字

22、符型),则在调用函数中或调用函数之前应当先声明,如何声明?声明: 类型名 函数名(形式参数列表); 6. 函数递归:直接或者间接调用自身。(如阶乘) 7. 全局变量:在函数外定义变量,如果定义时没给值,默觉得0 8. 局部变量:在函数内定义变量、形式参数、复合语句中定义变量,如果没给具体值,该值不拟定 9. 对于全局变量和局部变量重要观测在函数中与否被重新定义,若全局变量和局部变量同名,则自动屏蔽掉全局变量。 10. 函数调用时,实参向形参传递: (1) 按值传递:形参变化不会变化实参变化。 (若有返回值将值带回,否则带回控制流,函数返回值类型与函数类型一致); (2)

23、按地址传递:形参变化就会有也许变化实参变化。 (3) 数组传递,一般就把数组名及数组元素传过去 11. 如果一种函数名为:fun(x),严禁浮现:fun(x)=…,不管递归与否(满足标记符命名) 12. return y;或return (y);不要写成 return y1,y2; 13. 静态变量: static int x;(1) 没给值,默觉得0; (2) 始终占用内存,其值会保存下来(即赋值一次,不再重新赋值,保存上次运营成果) [静态变量]举例 eg:如下程序运营成果是( C )。 fun3(int x)

24、 main() { static int a=3; { int k=2,m=1,n; a+=x; n=fun3(k); return a; n=fun3(m); } printf("%d\n",n); } A、3 B、4 C、6

25、 D、9 14. 宏定义:#define 标记符 字符串,宏一定要先替代后计算 分带参和无参宏定义 无参宏定义 如#define P x*x //体现遇到P时用x*x替代 带参宏定义 如#define P(x) x*x //体现遇到P(x)时用x*x替代 [无参宏定义]举例 若有定义:#define N 3+2,则体现式N*2值为( B )。 A 、5 B、7 C、10 D 、0 解释:N*2=3+2*2=3+4=7。 [带参宏定义]举例 如

26、下程序运营后输出成果是( B ) 。 #define MIN(m,n) m

27、如,下面这样定义数组是不行: • 举例: ① int n; scanf(“%d″,&n);int a[n]; ② int k,M=5,a[k],b[M]; /* 不能用变量阐明数组大小*/ ③ float a[0]; /* 数组大小为0没故意义 */ ④ int b(2); /* 不能使用圆括号 */ 2. 数组元素下标可以是整型常量、变量、变量或整型体现式。 3. C语言规定,下标最小值是0,最大值则是数组大小减1 。 eg:m[8]中,体现数组m有8个元素,下标从0开始始终到7。这8个数组元素分别是:m[0]、m[1]、m[2]、m[3]、m[4]、m[5]、m[6]

28、m[7],注意没有m[8]。 4. 对一维数组初始化赋值 (1)可以只给某些元素赋初值。没有赋值元素:对于数值型数组,自动赋初值为0;对字符型数组,自动赋初值为空字符。 (2)只能给元素逐个赋值,不能给数组整体赋值。int m[5]={2,2,2,2,2}; 不能写成: int m[5]=2; (3)如果给所有元素赋值,则在数组阐明中,可以不给出数组元素个数,其长度等于初值表中数组元素个数。 int m[]={1,2,3,4,5}; 5. 二维数组元素引用 形式: 数组名[下标1][下标2]; 6. 二维数组元素初始化 (1) 分行初始化:存储类型符 数据类

29、型 数组变量名[行常量体现式][列常量体现式] = {{第0行初值表},{第1行初值表},……,{最后1行初值表}}; Eg:若有定义:int s[3][4]={{1,2},{0},{3,4,5}};则s[2][1]值为( B )。 A. 3 B. 4 C. 0 D. 1 (2) 省略一维大小:存储类型符 数据类型 数组变量名[行常量体现式][列常量体现式] ={ 初值表 }; Eg:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; printf("%d\n",a[1][2]); A. 2 B.

30、 3 C. 6 D. 7 7. 字符数组定义格式:char 数组名[常量体现式]; 8. 在c语言中,没有专门字符串变量,一般是用一种字符数组来存储一种字符串,由于字符串总是以‘\0’作为串结束标志,因而当把一种字符串存入一种数组时,也把结束符‘\0’存入数组,并以此作为该字符串结束标志 9. C语言容许用字符串方式对数组做初始化赋值。有两种方式: (1)按单个字符方式赋初值,其中必要有一种字符是字符串结束标记(但字符数组可以不波及’\0’) 。 如char s[]={‘1’,’2’,’3’,’\0’}; 10. (2)直接在初值表中写一种字符串常量。如char s[]={

31、123”};{}可以省略 char s[]={‘1’,’2’,’3’,’\0’};<=> char s[]={“123”};<=> char s[]=“123”; 11. 设已定义char s[ ]="\"Name\\Address\023\n";,则字符串所占字节数是( B )。 A.19 B. 16 C. 18 D. 14 12. 字符串常用串函数 ① strlen函数——测试字符串长度 • 格式: strlen(字符数组); • 功能:测试指定字符串实际长度(不含字符串结束标志‘\0’),并返回字符串长度 其中,函数参数可以是

32、字符型数组名或字符串常数,函数返回值是字符串长度。 strlen得到是有效字符个数(不波及‘\0’) sizeof得到是整个数组长度(波及‘\0’) ②. strcat函数——字符串连接函数 格式: strcat(字符数组1,字符数组 2); 功能:把字符数组2中字符串连接到字符数组1中字符串背面,同步删去字符串1串标志‘\0’,构成新字符串。该函数返回值是字符数组1首地址 ③. strcmp函数——字符串比较函数 格式:strcmp(字符串1,字符串2); 功能:字符串1和字符串2可以是字符型数组名或字符串常量。按照ASCII码顺序比较两个数组中字符串,并由函数返回值

33、返回比较成果 ④. strcpy函数——字符串拷贝函数 格式: strcpy(字符数组1,字符数组2); 功能:把字符数组2中字符串拷贝到字符数组1中。字符串结束标志‘\0’也一同拷贝。字符数组2也可以是一种字符串常量,这时相称于把一种字符串赋予一种字符数组 注意: 字符数组1必要定义足够大,以便能容纳被复制字符串,字符数组1长度不应当不不小于字符串2长度; 字符数组1必要写成数组名形式,字符数组2可以是字符数组名,也可以是一种字符串常量; 有时只需要复制字符数组2中前面若干个字符,这些用strcpy函数也能实现。 如:strcpy(m1,m2,3)体现将m2前面3个字符复

34、制到m1中,从而取代m1中最前面3个字符。 13. 冒泡排序、直接排序、互换排序 14. 杨辉三角、矩阵转置(矩阵转置只要循环一半就可以)。 15. 一维数组倒序存储、矩阵转置只要循环一半就可以 第七章 指针 n 本章重要内容: 指针概念、定义和引用、指针与函数、指针与数组、指针与字符串、指针数据类型小结 1. 指针变量本质是用来放地址,而一般变量是放数值。 int  *p 中   *p和p差别: *p可以当做变量来用;*作用是取背面地址p指向数值,p是当作地址来使用。 *p++ 和 (*p)++之间差别:改错题目中很重要 *p++是 地址会变化;(*p)++ 是数值

35、会要变化。 2. 指针变量定义:一般形式为:类型符 *指针变量名;如:int *p; 3. 指针变量引用。两种基本指针运算: ¨ &:取变量地址 ¨ * :指针运算符(或称“间接访问”运算符) 4. 指针变量作函数参数 [例7.3] 用函数实现两个变量互换 void swap(int *p1,int *p2) { int *t; t=*p1; *p1=*p2; *p2=t; } main() { int a=5,b=9; swap(&a,&b); printf(“a=%d,b=%d\n”,a,b); } 5. 指针函数(函数返回值为指针) 一般定义为

36、类型符 *函数名(参数表){……} [例7.4] 把两个数中最大值设为0 int *max(int *q1,int *q2) { return *q1 > *q2 ?q1 :q2;} main() { int x=5,y=9,*p; p=max(&x,&y); *p=0; printf("x=%d,y=%d\n",x,y); } 6. 函数指针(用一种指针变量存储一种函数入口地址,即指向函数,这样指针称函数指针) ①. 定义形式为:类型符 (*函数指针变量)(); 如:int (*p)(); ②. 使函数指针指向一种函数,一般格式为:函数指针变量=函数名;如

37、p=max; ③. 调用函数。一般格式为: (*函数指针)(实参表) 如:c=(*p)(a,b); [ 例7.5] 通过函数指针调用函数 int max(int x,int y){return x>y?x:y;} int min(int x,int y){return x

38、\n”,c,d); } 7. 指针与数组关系 一种变量有地址,一种数组涉及若干个数组元素,每个数组元素都在内存中占用存储单元,它们均有相应地址,这个地址就可以用指针来实现存储。 如有:int a[5],*p,*q; p=&a[0];q=&a[2]; *p=5;*q=8; 则a[0]和a[2]值分别为5和8。 8. C语言规定:数组名代表数组首地址,也就是第一种元素a[0]地址。 因而: a ó &a[0]。 若: p=a; /* 或写成p=&a[0];*/ 则: p+1 ó &a[1] *(p+1) ó a[1] p+i ó &a[

39、i] *(p+i) ó a[i] 9. 引用一种数组元素,可以用下标法或指针法。 ¨ 通过数组起始地址计算数组元素地址 ,即*(a+i) 或*(p+i) 形式。 ¨ 用指针变量解决数组元素 ,即p++ 形式: main() { int a[5]={3,8,9,2,6},i,*p; p=a; for(i=0;i<5;i++) { printf(“%d “,*p); p++; } } 【例7.5 】指针运算符“*”与增1运算符“++”同步作用于一种指针变量状况。 main() { int i,a[]={ 11,22,33,44,55,

40、66 },*p=a; printf("%3d,",(*p)++); 11 printf("%3d,",*p++); 12 printf("%3d,",*++p); 33 printf("%3d\n",++*p); 34 for(p=a;p

41、12,13,14} } a[0] a[1] a[2] 则 a <=> &a[0], a+1 <=> &a[1], a+2 <=> &a[2] 对于一维数组名为a[0],则 a[0] <=> &a[0][0], a[0]+1 <=> &a[0][1]. 因此第0行第1列地址体现为a[0]+1. 因此a[i]+j是第i行第j列元素地址 &a[i][j], 又a[i] 等价于 *(a+i) 因此在二维数组里*(a+i)+j和a[i]+j都体现地址。 (2) 通过地址访问二维数组 假设有如下定义: int

42、 a[3][5],i,j; 则二维数组a中任一元素a[i][j],可以用下述体现式之一来引用体现: ①. *(a[i]+j) 由上述知a[i]+j是第i行第j列元素地址,因而*(a[i]+j)与a[i][j]等价 ②. *(*(a+i)+j) , *(a+i)+j也是第i行第j列元素地址,因而*(*(a+i)+j)与a[i][j]等价 ③. (*(a+i))[j],相称于先取*(a+i)+j地址,再取其内值,因此与a[i][j]等价 ④. *(&a[0][0]+5*i+j) 由于每行5个元素,&a[0][0]+5*i+j就是第i行第j列元素地址, 因而*(&a[0][0]+5*

43、i+j)也与a[i][j]等价 *(&a[0][0]+5*i+j) <=> *(a[0]+5*i+j) <=> *(*a+5*i+j) <=>a[i][j] (3) 通过指向元素指针访问二维数组 如: int a[3][5],i,j,*p; p=&a[0][0]; 或 p=*a; 或 p=a[0]; 则 a[i][j] 等价于 *(p+i*5+j) 等价于 p[i*5+j] 10. 数组名作函数参数指针解释 [例7.7] 对形参数组改为指针。 int array_max(int x[ ],int n) { int i,m= x[0] ; for(

44、i=1;i

45、 for(i=0;i<5;i++) printf(“%d “,*num[i]); } 12. 多级指针 有:int a,*p=&a;若使:q=&p;则q是就指向指针变量指针变量,称q为二级指针。 二级指针定义一般形式为:类型符 **指针变量名; 如:int **q; 则:a=5;或*p=5;或**q=5;成果相似。 同样可以有三级、四级指针等等,我们把二级及二级以上指针称为多级指针。 [例7.9] 数组输出 main() { int a[5]={1,3,5,7,9}; int *b[5],i,**p; for(i=0;i<5;i++) b[i]=&

46、a[i]; p=b; for(i=0;i<5;i++) printf(“%d “,**p++); } 13. 指针与字符串 字符串体现形式 char 字符数组名[数组元素个数] 如有: char str[80]=“China”, *p=str; printf(“%s”,str); printf(“%s”,p); printf(“%s”,”China”); 用%s输入/输出字符串时,只需要懂得字符串开始地址即可。 使p指向字符串开始地址,可写成: char *p=”China”; 14. 字符指针作函数参数 [例7.11] 将例7.10改用

47、函数完毕 int StrLen(char *s) { int n=0; while(*s++) n++; return n; } main( ) { char str[ ]=”abc”,*p; int len; p=str; len=StrLen(p); printf(“%s长度为%d\n”,p,len); } 运营成果:abc长度为3 15. 返回字符串函数 [例7.13] 改写字符串复制函数 char *StrCopy(char *str1,char *str2) { char *p=str1; while((*s

48、tr1=*str2)!=’\0’) { str1++; str2++;} return p; } main() { char s1[80],s2[ ]= “abc”; printf(“复制之后字符串:%s\n”,StrCopy(s1,s2)); } 复制之后字符串:abc 16. 字符指针数组 [例7.14]将若干字符串输出 main() { char *str[ ]={“Word”,”Excel”,”Outlook”}; int i; for(i=0;i<3;i++) printf(“%s\n”,str[i]); }

49、[例7.15]使用多级指针完毕若干字符串输出 main() { char *str[ ]={“Word”,”Excel”,”Outlook”}; char **p; for(p=str;p

50、r=str+2; /* Error */ p=str+2; /* Ok */ n 字符数组有一块拟定、持续内存单元;而指针只有一种字内存单元。因此: char str[80],*p; scanf(“%s”,str); /* Ok */ scanf(“%s”,p); /* error */ 18. 指针数据类型小结 n 多种指针定义小结 int x; 整型变量x int *p; 整型指针p int a[n]; a是一种整型数组,有n个元素 int *p[n]; p是一种整型指针数组,有n个元素 int f(); f是一种函数

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服