已阅读5页,还剩102页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机软件技术基础,Lecture2ReviewC,1,PPT学习交流,TheCProgrammingLanguage,Appearedin1972DeveloperBellLabsDennisRitchieint*a;int*a;inta10;int*a10;,7,PPT学习交流,小测验:找出错误,voidmain()int*p;*p=10;,typedefstructintdata;intindexFooData;FooData*foo(intind)FooDataelement;element.data=ind+1;element.index=ind;return,8,PPT学习交流,C语言的特点,语言简洁、紧凑,使用方便、灵活。共有32个关键字,9种控制语句。运算符极其丰富。共有34种运算符。数据结构丰富,数据类型有整型,实型、字符型、数组、指针、结构体等。具有结构化的控制语句(如ifelse、while、switch、for)允许直接访问物理地址,能进行位操作,可以直接操纵硬件。生成的目标代码质量高,程序执行效率高。,9,PPT学习交流,C的关键字,C语言的关键字共有32个,根据关键字的作用可分为:数据类型关键字(12个):char,double,enum,float,int,long,short,signed,struct,union,unsigned,void控制语句关键字(12个):break,case,continue,default,do,else,for,goto,if,return,switch,while存储类型关键字(4个):auto,extern,register,static其它关键字(4个):const,sizeof,typedef,volatile,10,PPT学习交流,C的语句,与其它高级语言一样,语言也是利用函数体中的可执行语句,向计算机系统发出操作命令。按照语句功能或构成的不同,可将语言的语句分为五类。1.控制语句控制语句完成一定的控制功能。语言只有条控制语句,又可细分为三种:(1)选择结构控制语句:if()else,switch()(2)循环结构控制语句:dowhile(),for(),while(),break,continue(3)其它控制语句:goto,return,11,PPT学习交流,2.函数调用语句函数调用语句由一次函数调用加一个分号(语句结束标志)构成。例如,printf(ThisisaCfunctionstatement.);3.表达式语句表达式语句由表达式后加一个分号构成。最典型的表达式语句是赋值语句。例如“num=5;”就是一个赋值语句。,12,PPT学习交流,语言程序的总体结构,一个完整的语言程序,是由一个main()函数(又称主函数)和若干个其它函数结合而成的,或仅由一个main()函数构成。例仅由main()函数构成的语言程序。,13,PPT学习交流,C语言的数据类型,1.基本类型字符型char整型int浮点型float双精度型double无值类型void2.导出类型:指针、数组、结构、联合、枚举、自定义类型,14,PPT学习交流,数组,数组:相同类型变量的集合,共用一个名字,用下标区别。按照下标递增在内存中连续存放。数组元素:数组中的变量。每个元素都属于同一类型。由数组名和下标唯一标识。,15,PPT学习交流,一维数组的定义,格式,类型说明符数组名常量表达式,举例,inta10;,定义一个数组,数组名a,有10个元素,每个元素的类型均为int。,数组长度,注意:1.数组名后是方括号,而非圆括号。,从a0开始,没有a10.,16,PPT学习交流,一维数组的定义,数组名遵循标识符的命名规则。注意使用数据类型可以是任何类型,如int,float,char表示数组长度的常量表达式中不能是变量,只可以是常量和符号常量。定义后不允许改变。C语言不允许动态数组,正确的定义方式intb2+3;intc10;,错误的定义方式intx=10,ax;inta(10);inta1.0;,17,PPT学习交流,一维数组元素的引用,数组元素必须先定义,后使用不能一次使用整个数组,只能使用元素。使用数组元素与使用一般变量方法完全相同。形式:数组名下标例如inta10;/10个变量:a0、a1、a9scanf(“%d”,下标不要越界,不能使用a10,18,PPT学习交流,一维数组的初始化,(1)对全部数组元素赋初始值inta5=1,2,3,4,5;,a,1,2,3,4,5,a0a1a2a3a4,(2)对部分数组元素赋初始值inta5=1,2,3;,(3)可以省略数组长度,系统自动计算。inta=1,2,3,4,5;/长度就是5,a,1,2,3,0,0,a0a1a2a3a4,19,PPT学习交流,一维数组的应用举例,例:建立一个存放10个数据的数组,数组元素值为数组元素下标的10倍,然后按正序和逆序输出。,a,a0a1a2a3a4a5a6a7a8a9,20,PPT学习交流,一维数组的应用举例,变量i既做数组下标,又做循环变量;通过循环,逐个处理数组元素。,inta10,i;对于i从0到9循环ai=10*i;对于i从0到9循环printf(“%d“,ai);对于i从9到0循环printf(“%d“,ai);,voidmain()inta10,i;for(i=0;i=0;i-)/*逆序输出*/printf(%5d,ai);,21,PPT学习交流,数组应用常见错误,随机访问:countii=0,1.length-1count0=7;counti+1=counti*2;+count2;错误:数组相互赋值inta5=4,3,2,1;/定义数组aintb5=a;/错误,把数组a赋值给数组b错误:用数组类型作为函数的参数或返回值用全局数组或指针替代,22,PPT学习交流,数组应用常见错误,错误:下标越界,小于0或大于length-1,运行时出严重错误,不易发现原因for(i=0;i0,23,PPT学习交流,二维数组的定义,定义方式:类型名数组名行长度列长度例如:inta23;,inta34;floatb52;intc234;inta3,4;,(),24,PPT学习交流,二维数组的定义,存储方式:按行存储inta23;,0,1,2,0,1,a01,a10,a11,a12,a00,a02,a0,a1,a0,a1,每个元素ai又是一个包含3个元素的一维数组,a由2个元素组成a0,a1是行名,每行首地址,25,PPT学习交流,二维数组的引用,先定义后使用若有inta35;则a02表示引用二维数组中第0行第2列元素下标可以是整型常量或整型表达式stu2-12不要超下标引用inta35;引用a35是错误的!,26,PPT学习交流,二维数组的初始化,全部元素赋值1.分行赋值inta23=1,2,3,4,5,6;2.按元素顺序赋值inta23=1,2,3,4,5,6;3.允许省略第一维长度inta3=1,2,3,4,5,6;第一维长度为2,123456,123456,123456,27,PPT学习交流,二维数组的初始化,1234,1234,1234,部分元素赋值1.分行赋值inta23=1,2,3,4;2.按元素存储顺序赋值inta23=1,2,3,4;3.允许省略第一维长度inta3=1,2,3,4;第一维长度为2,28,PPT学习交流,字符、字符数组和字符串,字符和字符串理解字符串与字符数组的概念区分字符串常量与字符串掌握字符串的输入/输出处理能够使用字符串处理函数,29,PPT学习交流,字符型数据,C程序设计语言采用了ASCII标准字符集来提供对字符数据的支持。ASCII字符集提供了127个字符的编码。在计算内部实际上是将字符以整数形式存放在内存单元中的。这个整数实际上就是字符的ASCII编码C语言中字符常量是由1个字符构成的数据。在程序中,字符常量必须用单引起括起来,所以1和1是两个完全不同的对象。前者是字符,后者是一个数字。,30,PPT学习交流,字符变量,字符变量是用类型符char定义的变量。一个字符变量只能存储一个ASCII字符。例如:charc;正确的代码:c=?;错误的代码:c=?!;c=“abc”;,31,PPT学习交流,字符串常量,由多个字符组成的数据称为字符串常量(以后简称字符串),字符串常量的两边必须用双引号包含起来例如:“thisisastring.”或“china”,32,PPT学习交流,字符串常量,字符串在内存中存放时,系统将自动在字符串的末尾添加一个字符串的结束标记0(空字符),碰到第一个0就认为字符串处理结束。,语言中没有专门的字符串变量,通常是用字符数组来存放字符串。一个一维字符数组可存放一个字符串一个二维字符数组则可看成多个一维字符数组的组合,即每行可存放一个字符串。,33,PPT学习交流,字符数组,字符数组使用char关键字进行定义,一般形式如下char数组名数组长度;,字符数组初始化,逐个字符赋值,例;charch3=B,o,y;所占空间为3,用字符串常量赋值,例;charch3=“Boy”;所占空间为4,也可写成charch3=“Boy”;,34,PPT学习交流,字符数组,用字符串常量初始化字符数组会自动加结束符0,用字符常量初始化字符数组则不会,如:charc=Hello!,s=H,e,l,l,o,!,0;进行字符串处理时,就可以通过检测0来判定字符串是否结束字符串长度指的是字符串本身字符的个数,并不把字符串结束符0计算在内,判断下列赋值是否等价:charstr=china;charstr=c,h,i,n,a,0;charstr=china;charstr=c,h,i,n,a;charstr10=china;charstr10=c,h,i,n,a;,判断下列赋值是否等价:charstr=china;数组str的长度为6字符串”china”的长度为5,35,PPT学习交流,指针,1、地址的概念计算机的主存储器被划分成一个个存储单元,为了区分各存储单元,要为每个存储单元编号,这个编号即地址;,36,PPT学习交流,指针,2、地址与变量,inti=10;floatk=20.00;,内存中每个字节有一个编号-地址,i,变量是对程序中数据存储空间的抽象,10,20.00,k,37,PPT学习交流,指针,指针:是用来存储和指向内存地址的一种数据类型。和其他的数据类型一样,指针也有指针变量和指针常量。,inta=2;int*p=/q=0 x80004000访问内存和操作地址动态内存分配函数传地址调用配合结构体构造复杂数据结构,0 x80004014,q0 x800040140 x80004000,p0 x800040140 x80004004,a2,?0 x80004008,?0 x8000400c,?0 x80004010,38,PPT学习交流,指针,定义:类型标识符*变量名,int*p;/声明指向int型的指针变量p,p表示变量名是p,*表示这个变量时指针型,int表示指向的内容是整形,39,PPT学习交流,指针,定义:类型标识符*变量名,例char*ch;定义了指针ch,指向字符型变量int*r;定义了指针r,指向整型变量float*fp;定义了指针fp,指向单精度浮点型变量int(*p)10;定义了指针p,是指向数组的指针,数组内有10个元素,每个元素是整型的int*p10;定义了数组p,数组内有10个元素,每个元素是指向整型变量的指针int*fp;定义了指针fp,指向一个指向整型变量的指针,40,PPT学习交流,指针,指针的基本运算:p=,200020022004,41,PPT学习交流,指针的算术运算,指针算术运算的结果依赖于指针的基类型pi指向地址pid(i为整型数,d为p指向的变量所占字节数)p+,p-,p+i,p-i,p+=i,p-=i等若p1与p2指向同一数组,p1-p2=两指针间元素个数(p1-p2)/dp1+p2无意义,42,PPT学习交流,数组与指针,数组名是数组首元素的地址。可以这样说:数组名就是指向数组首元素的指针。语言提供了两种访问数组元素的方法,一是指针运算;二是数组下标运算。利用指针运算可以较方便的操作数组,但其中有许多细节必须清楚才能避免错误。,43,PPT学习交流,数组与指针,例如:inta10,*p;p=这样p为指向数组元素的指针p+i和a+i是地址,就是ai的地址即、a=a+i;在逻辑上都是错误的。要注意“*”和“+”、“-”连用时的结合性;,45,PPT学习交流,数组与指针,要注意“*”和“+”、“-”连用时的结合性;,p+(或p+=1),使p指向下一元素。注意越界,*p+等价于*(p+)先取出p指针变量所指向的单元内容(即*p),然后再使p+1p;,*+p等价于*(+p)先使p+1p,然后再取出p指针变量所指向的单元内容;,*(p+)与*(+p)不同。前者表达式值为a0,后者值为a1。,(*p)+表示将p所指向的单元内容值加1。,46,PPT学习交流,指针与字符数组,用双引号括起来的一串字符,如”hello”称为字符串常量。字符串常量的指针是它的首字符,h就是”hello”的首地址“一个字符串可用下面两种方法表示用字符数组存放一个字符串charch6=“hello”;用字符指针变量指向一个字符串char*pstr=“hello”;,47,PPT学习交流,字符指针变量与字符数组的区别,charstr=“Thisisastring.”;这是对字符数组的定义及初始化。系统先分配一块长度为字符串字符长度+1的连续的内存空间以存储字符串”Thisisastring.”;字符数组名str就是连续内存空间的首地址;字符数组str占用字符串长度+1个字节,并存储字符串的全部字节,48,PPT学习交流,字符指针变量与字符数组的区别,char*str=“Thisisastring.”;这是对字符指针变量的定义及初始化。系统先分配一块长度为字符串字符个数加上1的连续的内存空间以存储字符串常量“Thisisastring.”;然后将连续内存空间的首地址赋给字符指针str;字符指针变量str只占用2字节,并没有存储字符串的全部字节,49,PPT学习交流,字符指针变量与字符数组的区别,区别以下语句char*str=“Thisisastring.”;等价于char*str;str=“Thisisastring.”;charstr20;str=“Thisisastring.”;charstr=“Thisisastring.”;,均合法!,不合法!,合法!,50,PPT学习交流,字符指针变量与字符数组的区别,若定义的是字符数组,在编译时就为它分配内存单元,其首地址是确定的;而定义字符指针变量时,字符指针变量本身的地址是确定的,但其存放的地址值是随机的;,charstr210;scanf(“%s”,str2);,char*str1;scanf(“%s”,str1);,char*str1,str210;str1=str2;scanf(“%s”,str1);,51,PPT学习交流,字符指针变量与字符数组的区别,字符数组名虽然代表地址,但它的值是不能改变的;而字符指针变量的值是可以改变的。,char*str1=“IloveChina.”;str1=str1+7;printf(“%s”,str1);,charstr2=“IloveChina.”;str2=str2+7;printf(“%s”,str2);,52,PPT学习交流,字符指针变量与字符数组的区别,字符数组名虽然代表地址,但它的值是不能改变的;而字符指针变量的值是可以改变的。,char*str1=“IloveChina.”,*str2;str2=str1;*(Str2+1)=Z;,charstr2=“IloveChina.”;str2=str2+1;*(str2+1)=Z;,53,PPT学习交流,指针应用注意事宜,通配指针(void*)void*p=表示指针指向的内容没有类型限制可以与任何类型的指针互相赋值根据需要转成相关数据类型的指针空指针(NULL)一个预先定义好的(void*)类型指针常量表示一个指针没有指向任何东西可以与任何类型指针进行比较操作可以与0进行比较操作不能进行*操作,54,PPT学习交流,指针应用注意事宜,错误:访问空指针int*p=NULL;(*p)+;/或是p+,运行时出段错误良好编码习惯,检查指针是否为空if(p)/等效于p!=NULL(*p)+;对于指针为空的情况,进行异常处理if(!p)/等效于NULL=p或p=NULLprintf(“nullpointer.”)/指针为空良好编码习惯:比较NULL=p与p=NULL防止手误写成NULL=p;,55,PPT学习交流,错误:访问或释放野指针,结果不可预测当一个指针指向的内容非法时,这个指针就是野指针定义一个指针没有赋初值勤,这时候指针就是野指针当一个指针指向的内容被销毁后,这个指针就成为野指针良好编码习惯:定义时初始化,无值赋空值,不留野指针。voidfunctionint*p=NULL;良好编码习惯,释放完内存后,指针置空销毁一个指针指向的内容后,把这个指针置空(NULL)free(p);p=NULL;,指针应用注意事宜,56,PPT学习交流,指针数组,数组的元素类型是指针类型int*ptrs10;ptrs是一个数组,元素类型是指针,共10个指针,int*表示数组元素的类型是指向整数的指针,数组名称是ptrs,数组长度是10,57,PPT学习交流,指针数组,58,PPT学习交流,指向数组的指针,int(*array)10;array是一个指针,指向长度为10的整形数组(*array)必须加括号,括号运算符优先级高于*,指向的数组长度是10,*表示array是指针类型的变量,int表示指向的数组元素类型,59,PPT学习交流,指向数组的指针,60,PPT学习交流,指向指针的指针,一种特殊的指针,指向的变量类型是指针inta=2;int*p=/*q是指向p的指针*/,/*声明一个函数指针变量pfunc*/int*func(inta,intb);/*声明一个函数*/*函数返回值类型是一个指向int变量的指针*/,*表示这是一个指针,指针变量名字是pfunc,指向的函数返回值是int类型,指向的函数有两个int类型参数,64,PPT学习交流,指向函数的指针,pfunc是指向hello的函数指针,通过(*func)()调用,一个函数是若干语句的集合,经编译后存储在函数代码存储区,并占有一片连续的存储空间,对函数指针只能用函数名赋值而无其他运算,65,PPT学习交流,指向函数的指针,回调函数传递给调用者,让调用者回调传递事件处理函数给事件接收者线程结束时用回调函数释放资源泛型编程与面向对象思想intlower(structstudents1,structstudents2);inthigher(structstudents1,structstudents2);voidfind(structstudent*array,intlength,int(*compare)(structstudents1,structstudents2);compare是一个比较策略比较策略易变,而比较算法不易变,66,PPT学习交流,结构体,结构体将不同类型的数据组合成一个整体用来表示简单类型无法描述的复杂对象可以用结构体来定义用户自己的数据结构举例描述学生信息,67,PPT学习交流,结构体,结构体类型的声明,struct结构体名成员表列;“成员表列”形式类型成员名;类型成员名;.,68,PPT学习交流,结构体,结构体类型声明的说明(1),声明了一种类型,而不是定义变量结构体名可以没有,但是这样就无法再次使用该结构体类型了成员表列中是成员(Member)的定义成员的定义形式与变量定义相同成员类型可以是另一结构体类型,但不可直接或间接递归嵌套成员表列不可为空,至少要有一个成员,69,PPT学习交流,结构体,结构体类型声明的说明(2),同一结构体的成员不能重名不同结构体的成员可以重名结构体成员和其他变量可以重名结构体类型与其成员或其他变量可重名structtestinttest;test;结构体类型名称是struct结构体名,注意struct关键字不能省略,70,PPT学习交流,结构体,结构体类型声明的说明(3),即使两个结构体声明中的成员类型、名称、顺序都完全一致,它们也是不同的类型结构体类型也要“先声明,后使用”如果结构体类型声明在函数内部,则该函数之外无法引用此结构体类型一般把结构体类型声明放到文件最前面也可以把结构体类型声明放在头文件里,71,PPT学习交流,结构体,结构体类型声明举例,structstudentunsignednum;/*学号*/charname20;/*姓名*/charsex;/*性别*/unsignedage;/*年龄*/floatscore;/*分数*/charaddr50;/*地址*/;,72,PPT学习交流,结构体,结构体变量的定义有三种形式:,1、先构造结构体类型,后定义具有这种结构的变量。2、构造结构体类型的同时,定义具有这种结构的变量。3、利用无名结构体类型定义变量。,73,PPT学习交流,结构体,结构体变量的定义(1),structstudentunsignednum;charname20;charsex;unsignedage;floatscore;charaddr50;structstudentstu1,stu2;,先构造结构体类型,后定义具有这种结构的变量。,74,PPT学习交流,结构体,结构体变量的定义(2),构造结构体类型的同时,定义具有这种结构的变量,structstudentunsignednum;charname20;charsex;unsignedage;floatscore;charaddr50;stu1,stu2;,75,PPT学习交流,结构体,结构体变量的定义(3),利用无名结构体类型定义变量,structunsignednum;charname20;charsex;unsignedage;floatscore;charaddr50;stu1,stu2;,76,PPT学习交流,typedef的用法,类型定义关键字,用于在原有数据类型(包括基本类型、构造类型和指针等)的基础上,由用户自定义新的类型名称。主要由以下用法。,用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:,char*pa,pb;/它只声明了一个指向字符变量的指针,和一个字符变量;这多数不符合我们的意图,typedefchar*PCHAR;PCHARpa,pb;/定义了两个指向字符变量的指针,避免了错误,77,PPT学习交流,typedef的用法,用途二:用typedef来定义与平台无关的类型。比如定义一个叫REAL的浮点类型,在目标平台一上,让它表示最高精度的类型为:typedeflongdoubleREAL;在不支持longdouble的平台二上,改为:typedefdoubleREAL;在连double都不支持的平台三上,改为:typedeffloatREAL;也就是说,当跨平台时,只要改下typedef本身就行,不用对其他源码做任何修改。,78,PPT学习交流,typedef的用法,用途三:用typedef来简化struct定义,structtagPOINT1intx;inty;structtagPOINT1p1;,typedefstructtagPOINTintx;inty;POINT;POINTp1;,这样就比原来的方式少写了一个struct,比较省事,尤其在大量使用的时候。,79,PPT学习交流,结构体变量中成员的引用,对结构体变量的使用是通过对其成员的引用来实现的。引用结构体成员的一般形式如下:结构变量名成员名,规则:不能将一个结构体变量作为一个整体进行赋值和输出;只能对其各个成员分别输出printf(“.”,student1);printf(“%d”,student1.num);,80,PPT学习交流,结构体变量中成员的引用,2.若成员本身又属一个结构体类型,只能对最低级的成员进行赋值或存取以及运算。如:student1.birthday.year,3.对成员变量可以象普通变量一样进行各种运算,如sumage=student1.age+student2.age;,81,PPT学习交流,指向结构体的指针,定义形式:struct结构类型名*指针变量名举例structstudentstu,*p;p=,82,PPT学习交流,指向结构体的指针,用指针变量可间接访问它所指向的结构体类型变量的各个成员格式:指针变量名成员名例:page=18;(*指针变量名)成员名例:(*p)age=18结构体变量访问成员:stud1.age,83,PPT学习交流,指向结构体的指针,structstudent*p=NULL;p是指针,指向structstudent类型变量structclasschar*name;/*班级名称*/intcount;/*学生数*/;指针作为结构体成员structclasschar*name;intcount;student*p;/*指向学生结构体类型变量的指针作为成员;,84,PPT学习交流,指向结构体的指针,自引用结构,成员是指向同类型变量的指针structclasschar*name;/*班名字*/intcount;/*学生数*/structclass*node;/*下一个班级*/structclass类型的成员node,指向一个structnode类型变量,85,PPT学习交流,指向结构体的指针,三个structclass类型变量cs1,cs2,cs3,组成一个链状cs1-next=,cs1,30,next,cs2,28,next,cs3,28,next=NULL,86,PPT学习交流,动态分配内存,局部的自动变量在栈上分配,函数返回后变量销毁在堆上动态的分配内存,整个进程都可见,在手动释放之前一直存在程序根据需要向操作系统申请一块内存必须在代码里面显式的释放,否则造成内存泄露,87,PPT学习交流,动态分配内存,void*malloc(size_tsize)头文件stdlib.hsize指定分配内在的大小,以字节为单位返回指向所分配内存的指针分配失败,返回NULL,系统已无可用内存分配成功后,转成我们希望使用的类型void*ptr=malloc(sizeof(int);int*num=(int*)ptr;分配4个字节,并把分配的内存当作int使用,88,PPT学习交流,动态分配内存,voidfree(void*ptr);stdlib.h释放先前动态分配的内存应用程序结束前用free把申请的内存还给系统free(ptr);,89,PPT学习交流,函数参数传递,voidExchg1(intx,inty)inttmp;tmp=x;x=y;y=tmp;printf(x=%d,y=%dn,x,y);main()inta=4,b=6;Exchg1(a,b);printf(a=%d,b=%dn,a,b);return(0);输出的结果为:x=_,y=_.a=_,b=_.,90,PPT学习交流,函数参数传递-值传递,原来,其实函数在调用时是隐含地把实参a、b的值分别赋值给了x、y,之后在你写的Exchg1函数体内再也没有对a、b进行任何的操作了。交换的只是x、y变量。并不是a、b。因此a、b的值没有改变!函数只是把a、b的值通过赋值传递给了x、y,函数里头操作的只是x、y的值并不是a、b的值。这就是所谓的参数的值传递了。,91,PPT学习交流,函数参数传递,voidExchg3(int输出的结果为:x=_,y=_.a=_,b=_.,92,PPT学习交流,函数参数传递-引用传递,Exchg3函数的定义处Exchg3(int)。x、y前都有一个取地址符号“引用传递在这义处是:Exchg3(int功能上是不同的:值传递的函数里操作的不是a、b变量本身,只是将a、b值赋给了x、y。函数里操作的只是x、y变量而不是a、b,显示a、b的值不会被Exchg1函数所修改。引用传递Exchg3(a,b)函数里是用a、b分别代替了x、y。函数里操作的就是a、b变量的本身,因此a、b的值可在函数里被修改的。,94,PPT学习交流,函数参数传递,voidExchg2(int*px,int*py)inttmp=*px;*px=*py;*py=tmp;printf(*px=%d,*py=%d.n,*px,*py);main()inta=4;intb=6;Exchg2(输出的结果为为:*px=_,*py=_.a=_,b=_.,95,PPT学习交流,函数参数传递-地址传递,将a、b的地址值传递给了px、py,而不是传递的a、b的内容。对*px、*py的操作当然也就是对a、b变量本身的操作了。所以函数里头的交换就是对a、b值的交换了,这就是所谓的地址传递(传递a、b的地址给了px、py),,96,PPT学习交流,函数参数传递-一维数组,数组元素做为函数参数数组元素就是下标变量,它与普通变量并无区别。因此它作为函数实参使用与普通变量是完全相同的。如果是单个数组元素作为函数参数,那前面所讲的三种参数传递方式均可。,main()inta5,i;printf(input5umbersn);for(i=0;i0)printf(%d,v);elseprintf(%d,0);,97,PPT学习交流,函数参数传递-一维数组,数组名做为函数参数,数组名做为函数参数时,并不是将整个数组的元素都传递给子函数,仅仅是将数组的首地址传递。由于传递的是数组的首地址,因此在子函数中对数组元素的修改,在子函数返回后依然有效。但不能将此理解为是数组元素的双向传递。,98,PPT学习交流,函数参数传递-一维数组,数组名做为函数参数,main()intb5,i;printf(initialarraybn);for(i=0;i5;i+)bi=i;nzp(b);for(i=0;i5;i+)printf(%d,bi);,voidnzp(inta5)inti;for(i=0;i5;i+)ai=ai+1;,99,PPT学习交流,函数参数传递-一维数组,数组名做为函数参数要注意以下几点,形参数组和实参数组的类型必须一致,否则将引起错误。形参数组和实参数组的长度可以不相同,因为在调用时,只传送首地址而不检查形参数组的长度。当形参数组的长度与实参数组不一致时,虽不至于出现语法错误(编译能通过),但程序执行结果将与实际不符,这是应予以注意的。在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素的个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿防陌生人安全教育
- 2025 小学二年级数学上册减法拓展练习(两位数减一位数)课件
- 函授市场营销毕业论文
- “三查七对”原则在护理配药中的深化应用
- 2025山西大地环境投资控股有限公司校园招聘拟录用人员笔试历年参考题库附带答案详解
- 2025山东临沂市沂水龙山矿业有限公司专业人才招聘年龄条件调整及延长笔试历年参考题库附带答案详解
- 2025四川长虹虹微科技有限公司招聘训练场管理员岗位拟录用人员笔试历年参考题库附带答案详解
- 2025四川乐山市金口河区选聘区属国有企业领导人员4人笔试历年参考题库附带答案详解
- 2026年德阳城市轨道交通职业学院单招职业技能考试必刷测试卷及答案解析(名师系列)
- 2026年四川文轩职业学院单招职业适应性测试题库附答案解析
- 充电站安全培训课件
- 2025年音响工程师职业资格认证考试试题及答案解析
- 物业管理月度安全检查报告模板
- 2025年山西省教师职称考试(理论知识)历年参考题库含答案详解(5套)
- 甘肃省第一届职业技能大赛无人机驾驶(植保)项目(国赛)技术工作文件
- 《HJ 212-2025 污染物自动监测监控系统数据传输技术要求》
- 徐工XCT75起重机详细参数说明
- 加速康复外科理念下骨盆骨折诊疗规范的专家共识
- 2025至2030中国槟榔果行业未来发展趋势及投资风险分析报告
- 涉氨制冷企业检查表
- 子宫肌瘤教学查房
评论
0/150
提交评论