版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言章节复习第一章:C语言概述1、C语言的特点 1)任何一个C程序有且有一个main()函数 。 2)任何一个C程序文件有且有一个main()函数 , 一个C程序总是从main()函数开始执行。 3)C程序的基本单位是 函数 。 4)C函数的基本单位是 语句 。 5) C程序的每个语句必须以 ; 结束。 6)C程序的以 /* */ 作注释的开始和结尾。 7)C程序的每个语句可以写多行 。 8)C程序的每行可以写多个语句如:a=10; printf(“%dn”,a); 9)C语言区分大小写 。 _10)C语言没有输入输出语句,由函数代替 。11)“#”为编译以预处理,“include”包含语句
2、。12)在C只能识别半角语言字符,不能用全角。如果想输出汉字,必须在函数内用“”括起来。第二、三章:数据类型、运算符和表达式及标准输入输出1、 C程序的标识符只能由 字母 、 数字 、 下划线 组成、并且第1个字符必须为 字母 和 下划线_。2、 常量整型:三种表示形式:a)十进制整数,例:12;b)八进制整数,例:012;c)十六进制整数,如0、258、-3875、0357、0x35b、-6945L实型:两种表示形式:a)十进制小数形式,例:123.456;b)指数形式,例:1e3,2.3e-3。13.6795、-0.58、-.45、100.、0.5e5、-12.4e-10、12.5E-2注
3、意:1)E后的指数部分必须为整数2)在字母E或e的前后必须有数据3)在字母E或e的前后及数字之间不能有空格字符型:用 括号括起来的单个字符1)普通字符:a、B、;、%、#、: 2) 转义字符:n、 t、 r、 b、 、 、 ” 3) 用”加上13位八进制表示一个字符(范围0377),如54、127、 07 用”x”加上12位16进制表示一个字符,如x54、xa7、 xaf 字符串型:用” ”括号括起来的多个字符,c语言自动在后面加上0。如”This is a map!”、“bdWQhmbab89”4AtOU”符号常量:#define PI 3.14 #define EOF (-1)3、 一个变
4、量包含五个要素类型、名称、内容、地址、存储类型。4、填写下表类型表示占用字节数(视系统而定)表数范围有效位数输出格式整型Int2-32768-+32767%d %o %x无符号整型unsigned2065535%u %o %x长整型Long4-2147483648 +2147483647%ld %lo %lx单精度浮点型Float4%f %e %g双精度浮点型Double8%lf %f %e 字符型Char10255%c字符串型charNn%s5、 不同类型的数据进行混合运算时,数据的转换方式有两种:自动转换和强制类型转换,其中前一种转换方式的规则是:低类型转换成高类型、赋值号右边的类型转换成
5、左边的类型6、 printf(“格式控制”,输出列表)1) 格式控制包括:原样输出字符、格式符、转义字符、格式符包括(d、o、x或X、u、f、e或E、g或G、c、s、p)2) 输出列表可以是常量、变量、表达式,都是输出它们的值,各项之间用”,”分隔。3) 格式控制与输出列表类型和项数相同4) 指定宽度m或m.nA) m表示输出的总宽度。实际宽度m时则按实际位数输出。如printf(“%6d,%3dn”,3587, 3587);B) n表示按四舍五入输出的小数位数,或表示只取字符串左端n个字符。如printf(“%7.3f,%5.4s”,590.5327,”abcderf”);5) 加L或l:用
6、于输出long型和double型6) 加减号-:左对齐7) 加0:左边补07、 scanf(“格式控制”,输入的地址列表)1) 格式控制包括:格式符、原样输入字符2) 地址列表一定是地址:普通变量地址、字符串数组名(首地址)3) 输入的各项之间用空格、Tab键、回车分隔。4) 格式符前加l,表示输入长整型数据(可用%ld、%lo、%lx、%lu)及double数据(可用%lf、%le)。5) 格式符前加数字m,用来指定输入数据的宽度,但不能指定精度m.n。如:scanf(“%3d%4d”,&a,&b);6)%后加*m,表示跳过(丢掉)m列。 如:scanf(“%4d%*3d%4d”,&a,&b
7、); (分别输入12 345 67和123456789)7)scanf()输入字符串时,遇空格则输入结束。如8、 算术运算 (+、-、*、/、%、+、-)1)两个整数相除”/”,结果为整数,两个实数相除”/”,结果为double实数。如:50/8 值:_6_, 50./8 值:_6.125_printf(“%d,%fn”,50/8,50./8); 结果_2) 取余运算%只适用于整数,且余数的符号与被除数的符号相同。如:50%8 值:_, -50%8 值:_50%-8 值:_, -50%-8 值:_3)自增自减运算 A)+i、-i:变量的值先加1或减1,然后以新值进行其他运算。 B)i+、i-:
8、变量先以原值参与其他运算,然后其值再加1或减1,新值在下一个表达式或语句生效。如:main()int i=3,j,k; j=i+,k=i;i+;printf(“%d,%d,%dn”,i,j,k); 执行i=3;j=(i+)+(i+)+(i+);后i的值是_6_、j的值是_9_ 执行i=3;j=( + i)+(+i)+(+i);后i的值是_6_、j的值是_18_C)+、-运算只能用于变量,不能用于常量和表达式。D)注意区别普通变量的自增、数组指针变量和结构数组指针变量的自增自减的意义。 如:int a=3,b5,*p=b; 则a+、p+的意义是 4)算术运算的优先级+ -、* / % 、 + -
9、9、 赋值运算(=、+=、-=、*=、/=、%=、) a) 赋值号左边必须是变量,右边可以是常量、变量、表达式。b) 赋值后变量的值变为新赋的值,原值被冲掉且无法恢复。c) 赋值运算的结合性为“自右至左“。如:执行a=10; a+=a-=a*a;后a的值:_a=5,则执行a+=a*=a-3后,a的值是_4)区别a-10、与a=a-10,a,a、=、=、y?x+y:x-y,z的值是_x=4,y=6,z=x+5y?x+y:x-y,z的值是_x=4,y=6,z=5,z+=x+5y+3?x+y:x-y,z的值是_13、逗号运算(式1,式2,式n);1) 依次计算各表达式的值,最后一个表达式的值作为整个
10、逗号表达式的值。2) 逗号运算的优先级最低如:表达式(x=(a=2,a+7),b=5)的值是_ a=5;执行语句x=a+7,b=5;后 x= ;3) 一个逗号表达式可以与另一个表达式构成新的逗号表达式。 如:表达式(x=2*5,x*5),x+5的值是 4) 并不是所有出现“,”的地方都作逗号运算符。(int、printf、scanf)如:printf(“%d,%dn”,(x,y,z),z);14、sizeof()运算符1)计算各类数据所占存储空间的字节数。2)括号可以是常量、变量、类型说明符等若int a,b20;char *p=”abcdefghi”;如sizeof(5)、sizeof(5.
11、2)、sizeof(a)、sizeof(“abcde”)、sizeof(a)、sizeof(b)、sizeof(p)sizeof(char)、sizeof(double)、sizeof(strucu student) 15、所有运算的优先级。1级、()、 、.、-2级、单目运算、!、*、&、+、- 从右向左 3、4级算术运算:*、/、%、+、- 5级、移位运算: 每左移一位,等于该数*2,每右移一位,等于该数/2取整。6、7级关系运算:、=、=、= =、!= 8、9、10级位运算:&位与、(异或)、|位或 先化二进制,再进行位运算。其中异或算法是两位相同则为0,两位相异则为111、12级逻辑运
12、算:&、| 13级、条件运算:式1?式2:式3;从右向左 14级、赋值运算:=、+=、*=、/=、%=,结合性从右向左。 15级、逗号运算:式1,式2, 式n; 第四章:选择结构特别要注意:C语言中是用非0表示逻辑真的,用0表示逻辑假的。 C语言有构造类型,没有逻辑类型。 关系运算符号:注意=的写法,=和=的区别!(考试重点) if只管后面一个语句,要管多个,请用大括号! If(a), if(!a)表示什么意思 1、单分支:if (表达式) 语句; 功能:先计算表达式的值,若为“1”,则执行“语句”,然后再执行后续语句; 若为“0”,直接执行后续语句;2、双分支:if (表达式)语句1; el
13、se 语句2;功能:先计算表达式的值,若为“1”,则执行“语句1”,然后再执行后续语句;若为“0”,则执行“语句2”,然后执行后续语句; 说明:1)应把if语句看成一条语句,分为两部分,写两行,并后缩。 2)语句包含多个条时,用括起来组成复合语句。 3)多分支由双分支构成。 4)else总是与最靠近的if结合。 5)多分支的形式有多种,构成ifelse嵌套。 6)任何多分支都可用多个单分支完成。 7)”条件表达式”中若为与运算&,若&前面的式子值为0,则不再运算&后面的式子。如: main() int a,b,k;ab结果-155 0-454 -3-40-3 -1 if(+a0& b-=b-+
14、1) printf(“%d,%dn”,a,b); else printf(“%d,%dn”,b,a); printf(“%d,%dn”,a,b); 3、多分支:if (表达式1)语句1; else if (表达式2)语句2;else if (表达式3)语句3; else 语句4; 4、多分支:switch (表达式)case 常量表达式1:语句1; break;case 常量表达式2:语句2; break; case 常量表达式n:语句n; break;default: 语句n+1; 1)功能:先计算表达式的值,与case后的常量表达式相同时,则进入,若都不相同则从default中进入。进入后
15、顺序执行,遇break则退出switch语句。 2)default语句可有可无,位置可先可后。 3)表达式的结果只能是整型值或字符值,case后面一定要只能是整型常量或字符常量表达式,如0、4、-5、3+2、50、A、b等,不能i+3、“abcd”等。例:main() int a; scanf(%d,&a); switch(a-3) case 1: a+=1; case 2: a+=2; case 3: a+=3; case 4: a+=4; case 5: a+=5; default: a+=10; printf(a=%d,a); 4)写出下列程序的结果 main() int x,y; sc
16、anf(“%d”,&x); 输入x值 Y值 5-1 00 -41y=1;if (x7&-b7) printf(“%d,%dn”,a,b); printf(“%d,%dn”,a,b); 5、break;:用于结束整个循环,它只能跳出其所在的循环不能跳出外层循环,只能用于循环和switch语句。 6、continue;:用于结束本次循环,开始下一次循环。7、程序举例: 1)判断一个数是否为素数,输出 100200之间所有素数的个数;(例5.7,5.8) 2)计算的值(见例5.4,p100) 3)计算级数的值(见习题5-8,P113) 4)求阶乘n!。第六章:数组数组一、一维数组1、定义、意义 格式
17、:数据类型 数组名整型数; 如:int a10; 意义:定义了10个变量(元素),每个变量存放一个整数。 a0、a1、a2、a3、a4、a5、a6、a7、a8、a9 说明:下标从0开始,定义时的下标可以是整型数、整型数的表达式或符号常量。不能使用变量。 如:#define N 10 int a10, scoreN,b4+6; 2、赋值: 1)直接赋值: a0=6; a1=5, a2=a0+a1; 2)定义时赋值 int a10=7,5,3,8,9,1,2,10,6,4; float b 20=6.5,8.9,4.6; 注意:A)定义时不赋初值,所有元素的值不确定。赋值一部分,其余元素值为0或0
18、。 B)可以省略下标 int a =7,5,3,8,9,1,2,10,6,4; C)赋值个数不能多于下标数,否则系统会报错。 D)不能int a10= ;或int a10=7,5, , ,9,1,2 ; 3)键盘赋值:scanf(“%d”,&a0);(可用循环对所有元素赋值) 3、输出:数值数组,必须一个个单独输出。如printf(“%d”,a0); 4、数组的存储:按元素的先后顺序存储。数组名表示首地址,是常量,定义后不能赋值。 5、注意区别:定义时赋值与非定义时赋值。如:int a10=7,5,3,8,9,1,2,10,6,4; a10=7,5,3,8,9,1,2,10,6,4;(错误!)
19、6、例题:1)找出下列数据的最小值输出(用三种方法编程)。 3 2 5 9 6 4 7 10 8 12)输入10个整数,找出它们的最小值,输出最小值和位置。3)从键盘输入10个整数,输出它们并计算它们的平均值。4)从键盘输入10个整数,存入一个数组中,然后对其数据倒置并输出。5)对下列数据按从小到大排序输出。(分别用选择排序、冒泡排序、直接交换排序编程) 3, 8,5,9,6,2,10,7,1,4二、字符数组1、字符数组的作用:用于存放字符串(string)。字符串是用双引号括起来的一串字符,后面自动加0,如”ABCDE”、”Student” 、”This is a map”2、字符数组的定义
20、、意义 格式:数据类型 数组名整型数; 如:char s10; 意义:定义了10个变量(元素),每个变量存放一个字符。 s0、s1、s2、s3、s4、s5、s6、s7、s8、s9 3、赋值: 1)直接赋值: s0=A; s1=m, s2=7; 2)定义时赋值 char s10=A,B,C,D,E,F,G,H,I,0; /*需手工加0*/ char s10=”ABCDEFGHI”; char s10=”ABCDEFGHI”; 注意:定义时不赋初值,所有元素的值不确定。赋值一部分,其余元素值为0或0。 3)键盘赋值:scanf(“%c”,&s0); /*可用循环对所有元素赋值。可以接收任意字符*/
21、scanf(“%s”,s); /*后面只写数组名,输入时以空格、回车、Tab键作结束,字符串自动加0*/gets(s); /*输入时以回车键作结束,字符串自动加0*/ strcpy(s,”ABCDE”); 4、输出:printf(“%c”,si); /*用循环一个个输出*/printf(“%s”,s); /*整体输出,后面写数组名,遇0则结束*/puts(s); /*整体输出,后面写数组名,遇0则结束,输出完后换行*/ 5、数组的存储:按元素的先后顺序存储。数组名表示首地址,是常量,定义后不能赋值。 6、字符串的处理:从前到后一个个看一遍。 7、例题1)输入一个字符串,然后输出。(用三种方法输
22、入输出“ABCDEFGIHJ”)2)输入一句英文,统计出英文字符的个数3)输入一段文字,将其中的小写字母转换为大写,然后输出。4) 输入一行字符,统计其中字母、数字和其他字符的个数。5) 输入一行字符串,把它复制到另一个字符数组中6 ) 输入两个字符存入S、t数组中,把t连接到s后面三、字符串处理函数1、输入一个字符 格式:c=getcher() scanf(“%c”,&c);相同 功能:从键盘接收一个字符存到变量C中。可以接收任意字符。2、输出一个字符 格式:putchar(c) 功能:把C中的字符显示到屏幕上。 如:这putchar (A); char c=A; putchar(c);3、
23、输入一个字符串 格式:gets(s); 功能:接收一个字符串存入数组s中。输入时以回车键作结束,字符串后自动加04、输出一个字符串 格式:puts(s); 功能:把数组s中的字符串输出到屏幕上,遇0则结束,输出完后换行。5、求字符串长度 格式:strlen(s) 功能:返回字符串所含字符个数(长度),0不记。 如:char s50=”ABCDEF”; strlen(s) 结果为:6 strlen(“This is a map!”) 结果为:146、字符串的复制 格式:strcpy(s,t); 功能:把数组t(源)中的字符串复制到s(目标)中。 如:char s20,t20=”ABCDE” st
24、rcpy(s,t); strcpy(s,”student”); 说明:源一定是字符串变量,目标可以是字符串变量,也可以字符串常量。7、字符串连接 格式:strcat(s,t) 功能:把字符串t连接到字符串s之后。 如:char s50=”abcde”,t20=”m123” strcat(s,t) 结果:”abcdem123” strcat(s,”xyz”) 结果:”abcdexyz” 说明:源一定是字符串变量,目标可以是字符串变量,也可以字符串常量。8、字符串比较 格式:strcmp(s,t) 功能:对s、t中字符一个个比较,s大则返回正整数n, s小则返回负整数n,相等则返回0。 如:str
25、cmp(“abcf”,”abcdefg”); 结果 2 strcmp(“abcd”,”abcdefg”); 结果-101 strcmp(“ABCDE”,”ABCDE”); 结果 0 说明:两个字符串都可以是字符串变量,也可以字符串常量。9、说明: getcher()、putchar(c)、gets(s)、puts(s)包含在stdio.h中。 strlen(s)、strcpy(s,t)、strcat(s,t)、strcmp(s,t) 包含在string.h中 10、例: 任意输入两个字符串,把大的存入a中,小的存入b中然后输出。四、二维数组1、定义、意义 格式:数据类型 数组名mn; 如:in
26、t a34; 意义:定义了3行4列3*4个变量(元素),每个变量存放一个整数。 a00、a0 1、a0 2、a0 3a10、a1 1、a1 2、a1 3a20、a2 1、a2 2、a2 3 2、赋值: 1)直接赋值: a00=6; a01=5; 2)定义时赋值 int a34=1,2,3,4,5,6,7,8,9,10,11,12; int a34=1,2,3,4,5,6,7,8,9,10,11,12; int a4=1,2,3,5,6,9; 注意:A)定义时不赋初值,所有元素的值不确定。赋值一部分,其余元素值为0或0。 B)可以省略第一个下标 int a 4= 1,2,3,4,5,6,7,8,
27、9,10 ; 3)键盘赋值:scanf(“%d”,&a00);(只能一个个输入,可用双循环对所有元素赋值) 3、输出:数值数组,必须一个个单独输出,可用双循环输出所有元素。如printf(“%d”,a00); 4、数组的存储:按行顺序存储。数组名表示首地址,是常量,定义后不能赋值。 如:main() int a34=1,2,3,4,5,6,7,8,9,10,11,12,i,j; for(i=0;i3;i+) for(j=0;j4;j+) printf(%d ,aij); printf(n%u ,a); 5、例 1)编程:求5行5列矩阵对角线元素之和。2)编程:对4行4列矩阵转置。3)某班有30
28、人,有四门课程语文、数学、英语、专业课。编程输入各人的成绩,求各人的总分、平均分及各科科平分。五、二维字符数组1、定义、意义 格式:数据类型 数组名mn; 如:char s310; 意义:定义了3行10列3*10个变量(元素),每个变量存放一个字符。 每行存放一个字符串,存到s0、s1、s2中 s0 s00、s0 1、s0 2、s0 3s0 9s1 s10、s1 1、s1 2、s1 3 s1 9s2 s20、s2 1、s2 2、s2 3 s2 9 2、赋值: 1)直接赋值: s00=A; s01=B; 2)定义时赋值 int s310=A,B,C,0; int s310=“ABC”,”XYZ”
29、,”MNOPQ”; int s10=“chism”,”change”,”chank”,”char”,” check” ; 3)键盘赋值:一次输入一个字符:scanf(“%c”,&s00); s00=getchar();一次输入一个字符串:scanf(“%s”,s0); gets(s0); 3、输出:一次输出一个字符:printf(“%c”, s00); putchar(s00);一次输出一个字符串:printf(“%s”,s0); puts(s0); 4、例 1)输入下列五个字符串,从小到大排序输出 “chism”,”change”,”chank”,”char”,” check”第七章 函数1
30、、函数的定义 1) 函数的定义格式类型 函数名(形参列表) /*函数首部*/ 语句组; /*函数体*/ return 式子; 2)类型:指函数返回值的类型,可以是int、float、char、long、void、其中int型可以省略。3) 形参列表:是子函数要从主调函数接收数据的变量(等同于赋值的左边),每个形参要说明其类型,且用”,”分隔。可以没有形参。4) 函数体:用于完成相应的功能。2、函数的调用:1)格式:函数名(实际参数);2)说明:实际参数是主函数要传递到子函数的数据,等同于赋值的右边,可以是数、变量、式子。3)调用形式:函数作为单独一行语句进行调用mj(a,b); printf(
31、);函数作为表达式的部分使用 x=mj(a,b); n=sqrt(x);函数作为另一个函数的参数进行调用:printf(“%fn”, mj(a,b);printf(“%fn”, sqrt(x);3、函数的返回:函数返回可以使用return返回,也可以执行到函数尾自动返回调用函数。函数无返回值时,须将函数定义为void型。4、函数的说明:A)一般地,子函数应写在前面,主函数写在后面。如果函数定义在调用之后,则应先进行说明,才能正确调用。B)说明方法:与定义时的函数首部相似,加分号,可以省略形参。int型函数可以不说明。如float mj(float a,float *b);或float mj(f
32、loat,float *);C)说明位置:在函数内部或外部。5、函数的运行过程: 运行主函数前部调用子函数运行子函数返回主函数运行主函数后部6、函数的参数传递(特别注意主函数与子函数中的变量同名一同意的情况) 1)赋值调用:赋值调用时,函数将实参的值复制一份传递给形参,只进行单向传递。实参可以是常量、变量、表达式。2)传址调用:传址调用的函数,主调函数把变量的地址传到子函数中,调用语句采用swap(&a,&b)传递内存地址。子函数的参数一般为指针型,如swap(int *a,int *b)7、数组的调用1)一维数组 如int a10= 1,2,3,4,5,6,7,8,9,10;调用时一般传递数
33、组名和数组大小到子函数,如fun(a,10);子函数首部形式:fun(int a,int n)或fun(int *a,int n); 不论哪种形式,都是子函数用指针指向主函数的首地址。 2)二维数组 如int a34=1,2,3,4,5,6,7,8,9,10,11,12;调用时一般传递数组名和行数到子函数,如fun(a,);子函数首部形式:fun(int a4,int n)或fun(int (*a)4,int n); 3)字符串数组,一般只传递数组名。8、函数的嵌套 1)意义:在一个函数中调用另一个函数,叫函数的嵌套如main()调用a()函数,a()函数调用b()函数, b()函数调用c()
34、函数. 2)函数的递归调用:函数自身调用自身,即main()调用a()函数,a()函数再调用a()函数,.9、局部变量和全局变量1) 局部变量:在函数内定义或函数块内定义,只在函数内或块内有效,当退出函数或块内时自动释放。定义后初值不定。2) 全局变量:定义在函数外,从变量定义开始,到程序文件结束,变量一直有效。初值为03) 分析下列程序的运行结果练习1 练习2 int m=13; main() int fun2(int x,int y) int a=3,b=2,c=1; int m=3; c-=+b; return(x*y-m); b*=a+c; int b=5,c=12; c/=b*2;
35、main() a-=c; int a=7,b=5; printf(“%d,%d,%d,”,a,b,c); printf(%dn,fun2(a,b)/m); a+=-c; printf(“%d,%d,%dn”,a,b,c); 10、变量的存储类型 动态存储 自动变量:auto1)变量的存储类型 寄存器变量:register 静态存储 静态变量:static 外部变量:extern2)特点名称表示初值函数结束后,其存储空间各自特点自动变量auto不定自动释放默认为auto变量寄存器变量register不定自动释放寄存器存放在cpu寄存器中,cpu寄存器不够时,转为auto静态变量static0或0
36、不释放多次进入,只进行一次定义和初始化外部变量extern0或0不释放1)对外部变量进行说明2)后面定义的变量提前使用3)多个程序文件之间变量的引用11. 程序举例 P184-185:习题1、3、9、11第八章:指针一、指针的基本知识引例:int a,b,x10=1,2,3,4,5,6,7,8,9,10,*p,*q; 通过下列程序可以看到各变量的名称、内容、地址。#include #define N 10main()int x=100,y=200,aN=1,2,3,4,5,6,7,8,9,10,*p=&a,*q=x,i;printf(nnnnnnnnnnnnnnn x y ); /*显示x、y
37、的名称*/ for (i=0;iN;i+) /*显示数组元素的名称*/ printf(a%d ,i); printf(n%6d%6d,x,y); /*显示x、y的内容*/ for (i=0;iN;i+) /*显示数组元素的内容*/ printf(%6d,ai); printf(n%6u%6u,&x,&y); /*显示x、y的地址*/ for (i=0;iN;i+) /*显示数组元素的名称*/ printf(%6u,&ai);1、指针变量:定义时带*号的变量,它用于存放变量地址,这种变量称为指针变量。 指针变量存放哪个变量的地址,我们就说它指向哪个变量。2、指针的定义方式和意义 类型 *变量名;
38、 如:int a=5,b=10,*p=&a,*q=&b; float m,n,*x; char s10=”ABCD”,*ch; int *p5; 意义是:int (*p) 5; 意义是:int *p1; 意义是:一个指针变量有六个属性:指针变量名称、类型、内容、地址、存储类型、指针变量指向的内容。3、指针的赋值(赋值后要能画指向图)1) 把一个变量的地址赋给指针变量。如:int a,*p; p=&a;2) 数组名赋给指针变量:float a10,*x,; x=a;3) 一个指针变量赋给另一个指针变量。 如:int a=10,*p=&a,*q; q=p; 4)赋空值:(0、0、NULL)如:ch
39、ar *c; c=NULL; 5)赋值的形式有:定义时赋值 int a,*p=&a; 定义后赋值 p=&a; 6)注意:指针变量的值只能是内存中的一个地址,不能用数值或表达式给指针变量赋值。指针变量只能存放同类型变量的地址。如:int *p; p=1000; p=400+1500; (错) char c; p=&c; (错)4、指针的引用:用取值运算符“*”来存、取指向的变量的值。 如:*p=5; *x=45.65;b=*p+*x; printf(“%d %dn”,*p,*x);5、说明: 1)注意区别定义时的*p和引用时的*p。如int *a;*a=8; 2)一个任何类型的指针变量,占用存储
40、空间2个字节。(因为内存地址只有065535)6、例从键盘输入两个整数,用交换它们的值后输出。二、指针与数组(把数组的首地址或某元素的地址给指针后,指针与数组则建立了联系) 1、一维数组:如 int a10=2,4,6,8,10,12,14,16,18,20,*p=a;内容:a0a9、p0p9 *a、*(a+0) *(a+9) 、*p、*(p+0) *(p+9)地址:&a0&a9、&p0&p9 a、 (a+0) (a+9) 、p、 (p+0) (p+9) 2、指针的运算(指针运算前,必须先将指针指向一个数组) 指针加(减)一个整数,结果是指向该数组的另一个元素。指针自增(自减),结果是指向该数
41、组的下(上)一个元素。两个指针相减,结果是相距的元素个数。3、二维数组与指针:1)二维数组转化为一维指针。如 int a34=2,4,6,8,10,12,14,16,18,20,22,24,*p=a;内容:a00a23、p0p11 *a、*(*(a+0)+0) *(*(a+2)+3) 、*p、*(p+0) *(p+11)、*(ai+j)、*(a+i)j。 如:a12可以表示为:*(p+7)、p7、*(*(a+1)+2)、*(a1+2)、*(a+1)2 地址:& a00&a23、&p0&p11 a、 (a+0) (a+2) 、*a、 *(a+0)+0* (a+2)+3、p、 (p+0) (p+11)2)二维数组anm转化为二维指针:建立一个行指针(*p)m3)二维数组anm转化为二维指针:建立一个指针数组*pn已知int a45=1, 2, 3, 4, 5,6, 7, 8, 9, 10,11,12,13,14,15,16,17,18,19,20数组anm一维指针p行指针(*q)m数组指针*rnint anm, *p, (*q)m, *rn;赋值p=a;q=ar=a(赋值错误)r0=a0r1=a1a12p6q12r12*(a1+2)*(p+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理身份核对的法律依据
- 医疗护理员常见病症护理
- 护士分级护理营养支持
- 中医西学中专项128学时试题答案
- 矿山设备管理工程师面试技巧
- 联通集团高级管理岗位的面试技巧
- 旅游行业景区运营主管面试全攻略
- 轮机长岗位技能培训计划
- 零售业门店总经理面试要点与策略
- 联想企业市场部策划经理经验
- 乐山市市中区2026年上半年公开招聘城市社区专职网格员(禁毒社工)(24人)笔试备考题库及答案解析
- 柔性传感器介绍
- 抖音直播营销案例分析
- 2025青岛国企社会招聘笔试题及答案解析
- 7s管理制度标准规范
- 隧道爆破作业安全操作规程
- 小学生主题班会 拒绝校园欺凌 课件
- 硅酸镁铝增稠触变性及其农药中的应用探讨-陈杰
- 开平事业单位笔试真题
- 共青团光辉历史简洁版
- GB/T 14536.1-2022电自动控制器第1部分:通用要求
评论
0/150
提交评论