资源描述
计算机二级课程第1章程序设计基本概念1.1 程序和程序设计1.1.1 C程序计算机语言:二进制用户:自然语言自然语言-英文助记符、数学表达式(C语言)二进制指令(目标文件*.obj )今可执行程序(*.exe )C源程序(*.c )不能直接执行,只能进行编辑源程序转换为目标文件的过程,叫做“结译compile”目标文件(*.obj)也不能直接执行目标文件转换为可执行程序的过程,叫做“连接link”*.c -compile-*.obj -link*.exe1.1.2 程序设计1.2 算法算法:为解决某个问题而采用的确定且有限的步骡。算法的特性:1)有穷性:算法应该在有限的步骤内结束。2)确定性:算法不能有二义性,对于相同的输入能得到相同的输出。3)可行性:算法的步骤可以实现。4)拥有足够的情报:算法有0个或多个输入;1个或多个输出。1.3 结构化程序设计和模块化结构1.3.1 结构化程序C语言程序有3种基本结构:顺序结构选择结构(分支结构)循环结构(重复结构)1.3.2 模块化结构自顶向下、逐步求精、模块化C语言使用“函数”实现模块化。C语言是函数的语言。C程序的基本组成单位是函数。第2章C程序设计的初步知识2.1 简单C语言程序的构成和格式#include main()double a,b,area;a=1.2;/*将矩形的两条边分别赋给a和b */b=3.6;/*计算矩形的面积7area=a*b;printf(,a=%f,b=%f,area=%fn,1,a,b,area);)说明:1、main是主函数名。C语言程序必须使用main作为主函数名,其后需接一对圆括号()表示其函数身份。main函数是C程序唯一的入口,也是程序唯一的出口,C程序从main函数的第一条语句开始执行。故,C程序有且仅有一个main函数。2、C程序的语句以分号结尾。一般一条语句作为一行,但可以在一行上写多条语句,也可以将一条语句写成多行。语句需写在表示的函数体内。3、在程序中可以使用/*/符号表示注释,被注释的部分将不会在程序执行过程中起作用,仅仅作为程序的说明。int a=3,b=5;a=10;I*赋值*1b=20;a+b的值是_30_int a=3,b=5;a=10;*/a+b的值是15/* 赋值 b=20;2.2 标识符、常量和变量2.2.1 标识符标识符包括:变量名、数组名、函数名。1)由字母、数字、下划线组成;2)数字不能开头;3)不能和关键字重名。int(整型) float (单精度实型) double (双精度实型) char (字符型)sizeof (求字节数)short (短整型)long (长整型)area PI a_array x100_100x (正确)a$b a+ x.y 100x (错误)变量名可以叫做main、printf标识符对大小写敏感。int (错误)Int (正确)2.2.2常量常量:在程序执行过程中,值不发生改变的量。12-10(整型常量)3.14-2.70.0(实型常量)Ab(字符型常量)NCREWuhan(字符串常量)2.2.3符号常习惯上,常量使用大写字母表示,变量使用小写字母表示,但不是必须的。#define N 10main()(N=N*2;/*不能对符号常量赋值*1printf(%dn,N);)int n=10;n=n*2; r可以对变量赋值*/ printfC%dn,n);)#define PI 3.14 main()(double r,s;r=5.0;s=r*r*PI;printf(s=%fn,s);变量名可以叫做define、include2.2.4变量变量:在程序执行过程中,值可以发生改变的量。变量必须“先定义,后使用”定义时,需指明变量的数据类型和变量名。2.3 整型数据2.3.1 整型常十进制:32767-327680八进制:由“0”引导的整数。01001102340386(错误)十六进制:由“Ox”或“0X”引导的整数。0x123 Oxaa Oxlff0-9a-10 b-11. f-15长整型常量:40000L40000I无符号型常量:100U100u-12U (错误)2.3.2 整型变int a;int a,b,c;2.3.3 整型数据的分类long (int)4字节int4字节short (int)-32768327672字节signed有正有负unsigned 正整数unsigned short 0655352.3.4 整型数据在内存中的存储形式位(bit):二进制位100110最小单位字节(byte ):1 byte=8 bit 最基本单位2.4 实型数据2.4.1 实型常小数形式:0.123.1233.03.在实数的整数部分或小数部分为0时,可将为0的部分省略,但小数点不可省。0.00.0.(错误)指数形式:3E2-3*102-3003.15e33.15e-1E(e)的前面必须有数字,后面必须为整数。E22e 3e1.0(错误)2.4.2 实型变float (单精度实型)4字节 double (双精度实型)8字节2.5 算术表达式2.5.1 基本的算术运算符整数和整数运算,结果为整数参与运算的数字中,有一个实数,结果结果就为实数+-*/注意:在什么情况下运算结果才有小数部分。%求余数。求余数运算两边必须为整数。绝对值相除得余数,符号取决于被除数。main()printf(,%dn,4%3);1printfC%dnw,4%-3);1printf(,%dn,-4%3);-1printf(M%dnM,-4%-3);-1)2.5.2 运算符的优先级、结合性和算术表达式*/%+-2.5.3 强制类型转换表达式(目标类型)需转换变量(int)bint(b)(错误)2.6 鼠值表达式2.6.1 赋值运算符和赋值表达式注意:1)赋值运算的优先级很低,往往需要在所有运算完成后,再进行赋值。2)赋值运算理解上,从右向左进行。3)赋值后,右侧变量值不变,左侧变量值更新。4)赋值号左侧只能是变量,不能是常量或表达式。5)赋值表达式整体的值,等于被赋值变量的值。main()(int a,b;printf(%dn,(a=3)+(b=5);2.6.2 复合赋值表达式a+=1a=a+1a*=2-a=a*2main()int a=5;a+=a-=a+a;printf(M%dnM,a);)2.6.3 鼠值运算中的类型转换以被赋值变量的类型为准。int a;a=3.5;3float a;a=3;3.02.7自加、自减运算符和逗号运算符2.7.1 自加运算符”+”和自减运算符“一”独立构成语句时,i+和+i是等价的。j=i+; j=i;”先取值,后自增i=i+1;j=+i;9i=i+1;”先自增,后取值j=i;main()int i=5;printf(%dn,i+);5printf(M%dn,+i);7)2.7.2 逗号运算符和逗号表达式逗号运算符的优先级最低;从左至右运行每个表达式;整个逗号表达式的值,等于最后一个表达式的值。main()(int i,j,x;x=(i=3,j=4);printf(%dn,x);4)main()(int i,j,x;x=i=3,j=4;printf(%dn,x);)第3章顺序结构3.1 赋值语句在赋值表达式后加上“:号,构成赋值语句a=10赋值表达式a=10;赋值语句3.2 数据输出3.2.1 printf函数的一般调用形式printf(ua=%dn,a);1 )非格式说明符部分原样输出。如:a=2 )转义符进行转义。n 换行t下一制表位b 退格r回到开头3)格式说明符输出变量值。1.1.2 printf函数中常用的格式说明%d%ld %u%o%x%f%lf%e%g1.1.3 使用printf函数时的注意事项3.3 数据输入3.3.1 scanf函数的一般调用形式scanf中格式说明符的相关规则,和printf相同。scanf中变量前需要加&号(取地址卜scanf(%d,&a);3.3.2 scanf函数中常用的格式说明3.3.3 通过scanf函数从键盘输入数据scanf中非格式说明符部分,在输入时应原样输入。scanf(%d,%d,&a,&b);10,20scanf(a=%d,%d,&a,&b);a=10,20连续格式说明符,应使用空格、制表符、回车分隔数据。scanf(%d%d,&a,&b);1020按指定宽度输入数据。scanf(%2d%3d%d,&a,&b,&c);123456789printf(%d,%d,%dn,a,b,c);12,3,456跳过某个输入数据。格式说明符中*号,表示跳过此位置的输入。a=b=c=5;scanf(%d%*d%d,&a,&b);123printf(%d,%d,%dn,a,b,c);1,3,53.4 复合语句和空语句3.4.1 复合语句在C语言中,可以使用号将多条语句括起来,形成复合语句。复合语句在逻辑上当做一条语句处理。3.4.2 空语句;号是构成C语言语句的重要符号,若只有一个;号也能构成语句,它是一个空语句。空语句本身不做任何操作,故一般不会影响程序结果,而不是完全不会影响程序结果。第4章选择结构4.1 关系运算和逻辑运算4.1.1 C语言的逻辑值C语句中没有逻辑类型。在程序中使用0值表示假,使用非0值表示真。main()(if(O) printf(yesn);else printf(non);)nomain()(if(-1) printf(yesn);else printf(non);)yes在程序计算结果时,用0值表示假,用1表示真。main()printf(,%dn,2=32);0)=1);14.1.3 逻辑运算符和逻辑表达式&逻辑与“且”两边同时为真,结果为真。|逻辑或“或”两边有一边为真,结果为真。!逻辑非原来真,变为假。原来假,变为真。main()printf(%dn,43&3=2);0printf(%dn,43|3=2);1printf(%dn,!(43);0逻辑运算的中断:&运算前段为假,后段不运行。main()(int x=3,y=5;(x=0)&(y=8);printf(%d,%dn,x,y);0,5)|运算的前段为真,后段不运行。main()int x=O,y=O;x+|y+;printf(%d,%dn,x,y);运算符的优先级:逗号单目算术运算符关系运算符逻辑运算符赋值运算符运算符!*/%+-=3&2+5|7*314.2 if语句和用if语句构成的选择结构4.2.1 if 语句计算if的括号内表达式的值是否为真,若为真则运行if的子句)main()(int x;scanf(%d,&x);if(x%2=0)printf(偶数n);)注意:1 ) if只能控制最近的一条语句。int x;scanf(M%dM,&x);if(x%2=0)x+;x+;printf(dn”,x);2 )若有多条语句作为if的子句,需用0构成复合语句。 main()(int a=3,b=6,t=0;if(a=b) t=a; a=b; b=t;printf(%d,%dn,a,b);6,0)3 )在if的括号后不用加“;”号,否则会影响程序的逻辑。main()int x=8;if(x=6);x+;printf(M%dn,x);9)4 ) if的条件通常是一个关系表达式,但要注意其他情况,特别是赋值表达式冒充关系表达式的情况。main()|int x=8;if(x=6)x+;printf(dn”,x);7if-else计算if的括号内表达式的值是否为真,若为真则运行if的子句,否则运行else的子句。int x;scanf(M%dM,&x);if(x0) printf(H%dnn,x);else printf(%dn,-x);)注意:1) else和最近的if配对4.2.2嵌套的if语句main()(int a=3,b=4,c=5;if(a3)if(b=4) C+;else c-;printfC%dn,c);5int a=3,b=4,c=5;if(a3)(if(b=4) C+;else c-;printf(%dn,c);4)4.3 条件表达式构成的选择结构条件表达式是C语言中唯一的三目运算。exp1? exp2: exp3先计算exp1是否为真,若为真取exp2,为假取exp3。main()printf(,%dn,53?47?1:10:100);4.4 switch语句以及用switch语句和break语句构成的选择结构4.4.1 switch 语句switch(a)(case 1: n+;case 2: n+;case 3: n+;case 4: n+;case 5: n+;)语法规定:1) switch后有一对小括号。2)小括号中必须时整型或字符型表达式。3 )小括号后不能有“;”号。4 ) case和数值间的空格不能省略。5 ) case后需使用号。6 .4.2 switch语句的执行过程1 )计算switch的括号内表达式的值。2 )判断表达式的值和哪一个case相等,若找到了,则运行对应case后的语句。3 )若没有找到,则运行default后的语句。4 )当某一个部分的语句运行后,会无条件的运行其后所有的语句,直到遇到break为止。4.4.3在switch语句体中使用break语句在结构中遇到break语句,立即终止结构。main()|int a=O,n=O;switch(a)(default: n+;case 1: n+;case 2: n+;case 3: n+;break;case 4: n+;case 5: n+;printf(M%dnH,n);4.5语句标号和goto语句4.5.1 语句标号4.5.2 goto 语句第5章循环结构5.1 while语句和用while语句构成的循环结构5.1.1 while循环的一般形式循环变量初始化while (循环条件)(循环体)5.1.2 while循环的执行过程1 )循环变量初始化2)判断循环条件,若条件为真,则运行循环体。若条件为假,循环终止。3)循环体运行完,返回到第2步,判断条件。1+2+3+100while(i=100) sum=sum+i; i+; printf(H%dn,sum);)1+2+3+50main()(int sum=0,i=1; while(i=50) sum=sum+i; i+; printf(dn”,sum);)30+31+32+50main()int sum=0,i=30;while(i=50) sum=sum+i;i+;printf(,%dn,sum);30+32+34+.+50main()(int sum=0,i=30;while(i=50) sum=sum+i;i+=2;)printf(dn”,sum);1至IJ100内,3和5的公倍数的和main()int sum=0,i=1;while(i=100)if(i%3=0&i%5=0)sum=sum+i;i+;printf(H%dn,sum);)V+22+32+102main()(int sum=0,i=1;while(i=10)(sum=sum+i*i;i+;printf(%dn,sum);5.2 do-while语句和用do-while语句构成的循环结构5.2.1 dowhile语句构成的循环结构循环变量初始化do(循环体while (循环条件);main()(int sum=0,i=1;dosum=sum+i;i+;while(i=100);printf(%dn,sum);)5.2.2 do-while循环的执行过程1)循环变量初始化2)运行循环体3)判断循环条件,若条件为真,则返回第2步继续循环;若条件为假,则循环终止。while循环和do-while循环的比较1 )语法区别:while的条件在循环体前,do-while的条件在循环体后,前面是do ; while的条件没有“:号,do-while有。2 )逻辑区别:while先判断条件,后执行循环体;do-while先执行循环体,后判断条件。当初始条件不满足时,while 一次也不运行循环体;而do-while至少运行一次。5.3 for语句和for语句构成的循环结构5.3.1 for语句构成的循环结构for(循环变量初始化;循环条件;循环变量增量)(循环体)5.3.2 for循环的执行过程1 )循环变量初始化2)判断循环条件,若条件为真,则运行循环体;若条件为假,循环终止。3)运行循环体4)运行循环变量增量后,返回到第2步,判断条件1+3+5+99main()(int sum=O,i;f0r(i=1;i=99;i+=2)sum+=i;printf(dn”,sum);1-2+3-4+5-6+7+99-100main()(int sum=0,i,s=1;for(i=1;i=100;i+)(sum+=s*i;s=-s;printf(%dn,sum);1+1/2+1/3+1/50main()(double sum=0;int i;for(i=1;i=50;i+)(sum+=1.0/i;printf(%fn,sum);5.3.3有关for语句的说明1) for语句中的三个表达式都是可以省略的。i=1;for(;i=100;i+)(sum+=i;i=1;for(;i=100;)sum+=i;i+;死循环-无法退出的循环i=1;for(;)(if(!(i=100)break;sum+=i;i+;)5.4 循环结构的嵌套外层循环每循环一次,内层循环循环一轮;内层循环循环结束,外层循环才循环一次。 main()int i,j,cnt=O;for(i=1;i=4;i+)for(j=1;j=3;j+)cnt+;printf(,%dn,cnt);5.5 break和continue语句在循环体中的作用5.5.1 break 语句立刻终止循环结构main()(int i,sum=0;for(i=1;i=10;i+)(if(i=5)break;sum+=i;printf(%dn,sum);10)5.5.2 continue 语句结束(跳过)本次循环后面的语句,继续一下次循环。main()int i,sum=O;for(i=1;i*b) return a;else return b;main()(int a=10,b=20;int *c;c=fun(&a,&b);printf(,%dn,*c);20)第9章数组9.1 一维数组的定义和一维数组元素的引用9.1.1 一维数组的定义int a10;说明:1)这里定义的是一个由10个int型元素组成的一维数组a。2)定义时方括号中的整型常量表达式表示数组中元素的个数。定义数组时须指明长度,且长度表达式不能由实型或变量组成。3)数组元素的下标从0开始,故长度为5的数组,下标最大只能到4Oint矶10;正确int a5+5;正确int n=10,an;错误int n5.0错误#define N 10int aN;正确int a;错误1.1.2 一维数蛆元素的引用求和:int i,sum=0;for(i=0;i=9;i+)sum+=ai;求平均值:int i,sum=0; double ave;for(i=0;i=9;i+)sum+=ai;ave=sum/10.0;求最值:int i.max;max=aO;for(i=0;i=9;i+)if(maxai)max=ai;转置:intfor(i=0,j=9;ij;i+,j-)(t=ai; ai=aj; aj=t;排序:排序使用3个变量完成,外层循环i从第1个开始到倒数第2个为止,内层循环j从i的下一个开始到最后为止,循环体内比较aiaj的关系(重复后一个字,从小到大),堀aiajintfor(i=0;i=8;i+)forQ=i+1;j=9;j+)if(aiaU)1.1.3 一维数组的初始化int b5=10,20,30,40,50;标准方式:初始化个数和数组长度相同int b5=10,20,30,40,50,60;错误intb5=10,20,30;定义数组时若只给部分元素赋初值,则未被赋初值的元素将自动赋。值。int b=10,20,30);定义数组时若同时对数组进行初始化,则可以省略数组的长度,此时,数组长度等于初始化的个数。1.1.4 通过鼠初值定义数组的大小9.2 一维数组和指针数组名代表数组的首地址常量。首地址(首个元素的地址卜int 矶5,*p;p=a;p=&a0;程序中所有出现a的地址都能被p替换。printf(%dn,*p+);printf(%dn,*+p);printf(%dn,+*p);printf(%dn,(*p)+);printf(%dn,*p);数组元素的多种表示方法:ai pi*(p+i)*(a+i)p+;对a+;错指针指向数组中段,下标从0开始重新计数。inta5=10,20,30,40,50;int *p;P=&a2;printf(%dn,p-1);209.3 函数之间对一维数组和数组元素的引用9.3.1 数组元素作实参和普遍变量一样9.3.2 数组名作实参数组名作为实参,则形参有以下表达方式:1 )使用和实参一样的数组定义。int aN2 )使用不指明长度的数组定义。inta3)使用指针表示。int*a3 .3.3数组元素地址作为实参4 .3.4函数的指针形参和函数体中数组的区别9.4 一维数组应用举例9.5 二维数组的定义和二维数蛆元素的引用9.5.1 二维数蛆的定义int a23;9.5.2 二维数组元素的弓I用9.5.3 二维数组的初始化int a23=1,2,3,4,5.6);int a23=1,2,4);int a23=1,2,4);int a3=1,2.3,4,5.6);错误int a2=1,2,3,4,5,6);主对角线置0:for(i=0;i=3;i+)aii=O;左下三角置0:for(i=0;i=3;i+)for(j=0;jv=i;j+) aij=O;右上三角置0:for(i=0;i=3;i+)for(j=i;j=3;j+) aij=O;反对角线置0:for(i=0;iN;i+)aiN-1-i=0;左上三角置0:for(i=0;iN;i+)for(j=0;j=N-1-i;j+) aij=O;右下三角置0: for(i=0;iN;i+)for(j=N-1-i;jN;j+)aiU=O;转置:for(i=0;iN;i+)forO=0;j10,11,12,13,14,15,16);int *p=a;printf(d”,p5);6二维数组元素的多种表示方法:aij*(ai+j)*(*(a+i)+j)(*(a+i)j*(&矶 OO+i*N+j)指向数组的指针:int a23=1,2,3,5,6.7);int (*p)3:p=a;由指针构成的数组:int a23=1,2,3,5,6,7;int *p2;pO=aO;P1=a1;int *p;int *p;int (*p)M;int *pN;9.7 二维数组和指针数组作为实参int aNint aint *a二维数组作为形参的多种表示:int aNMint 矶M第10章字符串10.1 用一维字符数组存放字符串程序会自动在字符串常量的末尾添加(看不见的八0字符串的结束符char s尸abc);printf(H%dnM,sizeof(s);,010 NULL10.1.1 通过鼠初值的方式给一维字符数组赋字符串chars1=”abc”;char s2=,a,b;c,0,;10.1.2 在C程序执行过程中给一维字符数组赋字符串char sn=,a/b7c,0;char sO=nabcn;char sQ=MabcM;char s4=,abcH;char *p=abc*;char *p; p=,abcn;错误情况:char sO=a,b,c);char s3=abc;char s4; s=abc;10.2 使指针指向一个字符串10.2.1 通过鼠初值的方式使指针指向一个字符串10.2.2 通过鼠值运算使指针指向一个字符串10.2.3 用字符数组作为字符串和用指针指向的字符串之间的区别10.3 字符串的输入和输出10.3.1 输入和输出字符串时的必要条件10.3.2 用格式说明符s进行整串输入和输出%d %o %x %f %c%s表示从当前所指的位置开始输出,直到遇到结束符为止。main()(char s=nabcdef;char *p=s;printf(H%snM,p+2);cdef使用S输入字符串时,遇到空格将停止输入。chars120,*p=s1;scanf(%s,p);chars120,*p;scanf(%s,p);不能对未确定指向的指针赋值10.3.3 调用gets、puts函数在终端输入或输出一行字符串gets(s)能够接受空格的输入main()(char s20;gets(s);puts(s);)10.4 字符串数组10.5 用于字符串处理的函数strlen(s)求字符串长度,从当前所指的位置开始统计,直到遇到结束符为止。char s20=abcde;printf(%dn,strlen(s);520printf(%dn,sizeof(s);char s=abcde;printf(%dn,strlen(s);5printf(%dn,sizeof(s);6strcpy(s1,s2)将后一个字符串的内容复制到前一个字符串中。strcat(s1,s2)将后一个字符串连接到前一个字符串的后面strcmp(s1,s2)比较两个字符串的大小,前面大返回正数相等返回0后面大返回负数第11章对函数的进一步讨论11.1 传给main函数的参数main(int argc.char *argv|)其中:argc表示执行程序时命令行参数的个数。argv口中存放的是各命令行参数的首地址。main(int argc.char *argv)while(argc1)argc-;printf(M%sM,argvargc);)11.2 通过实参向函数传递函数名或指向函数的指针变量int (*f)();指向函数的指针int add(int a, int b)(return a+b;)main()(int (*f)(int,int);/定义指向具有2个整型参数且返回值为整型的指针ff=add;令指针f指向函数add通过指针f调用函数addf(3,5)指向函数的指针int *f(int a,int b);返回值为指针的函数11.3 函数的递归调用递归:直接递归-函数自己调用自己间接递归-函数通过其他函数调用自己。斐波那契数列1123581321int f(int n)(if(n2) return f(n-1)+f(n-2);else return 1;)main()(printf(%dn,f(5);) int f(int n)if(n1) return n*f(n-1);else return 1;第12章C语言中用户标识符的作用域和存储类型12.1 局部变、全局变量和存储分类12.1.1 用户标识符的作用域局部变量和全局变量重名时,全局变量被屏蔽,局部变量发挥作用。int a=50;void fun()(printf(%dn,a);)main()(a+;(int a=100;printf(%dn,a);fun();printf(%dn,a);12.1.2 局部变、全局变量和存储分类12.2 局部变及其作用域和生存期局部变量的生命周期较短,在函数调用完时,局部变量被释放。register寄存器型register型变量不能进行&运算auto 自动型默认类型不赋初值,初值为随机值不能保留上一次的运行结果static 静态型不赋初值,初值为0保留上次的运行结果extern 外部型void fun()(static int a=1;a+;printf(%dn,a);main()fun();2fun();3int a=100;void fun()extern int a;printf(H%dn,a);)main()(fun();100)12.2.1 2成0变12.2.2 register 变量12.2.3 静态存储类型的局部变量12.3 全部变及其作用和生存期在默认情况下,全局变量的特性类似于static的局部变量全局的static :此变量不能被外部引用。extern :引用外部的变量。Filel.c static int a=10;fun 1()(printf(drT,a);File2.cfun2()(extern int a;printf(M%dn,a);12.3.1 全局变的作用域和生存期12.3.2 在同一编译单位内用extern说明符扩展全局变曜的作用域12.3.3 在不同蝙译单位内用extern说明符扩展全局变量的作用域12.3.4 静态全局变量12.4 函数的存储分类12.4.1 用extern说明函数12.4.2 用static说明函数第13章编译预处理和动态存储分配13.1 编译预处理13.1.1 宏替换先替换,后计算#define N 5+5#define M N/Nmain()(printf(%dn,2*M);16#define N(x,y) x*ymain()(printf(%dn,N(2+3,2);813.1.2 文件包含1 )预处理命令包括:#define #include 0预处理今预先处理,预先是相对于编译,即,预处理命令在编译前执行。2 )预处理命令后没有:号,故不属于C语句。3 )预处理命令#include后可以声明包含任意类型的文件,一般文件扩展名为*.h ,但不一定。4)当预处理命令中,所包含文件出错时,整个程序需要重新编译。13.2动态存储分配13.2.1 malloc 函数和 free 函数int *p;p=(int*)malloc(sizeof(int);分配int型所占字节数的空间返回空间的地址。free(p);释放p所指空间的内容。13.2.2 calloc 函数分配n个连续空间。main()(int *p;p=(int *)calloc(5,sizeof(int);p0=10;p1=p0*2;printf(%dn,p1);20第14章结构体、共用体和用户定义类型14.1 用typedef说明一种新类型名用来定义新的类型名typedef旧类型名新类型名;typedef int *INT;14.2 结构体类型多种数据类型的集合。14.2.1 结构体类型的说明struct ST定义结构体类型double a;int b;);s
展开阅读全文