C语言程序设计笔记-知识点及例题_第1页
C语言程序设计笔记-知识点及例题_第2页
C语言程序设计笔记-知识点及例题_第3页
C语言程序设计笔记-知识点及例题_第4页
C语言程序设计笔记-知识点及例题_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上第一章 程序设计基本概念1.1程序和程序设计 程序:连续执行的一条条指令的集合称为“程序”。1.1.2程序设计 1.确定数据结2.确定算法3.编码4.在计算机上调试程序 5.整理并写出文档资料1.2算法 定义:是指为了解决某个特定的问题而采取的确定且有限的步骤。1有穷性 2确定性 3可行性 4有零个或多个输入 5有一个或多个输出1.3结构化程序设计和模块化结构 结构化程序由三种基本结构组成1顺序结构 2选择结构 3循环结构12)计算机能直接执行的程序是(B )。A)源程序 B)目标程序 C)汇编程序 D)可执行程序13)以下叙述中正确的是( D ) A)程序

2、设计的任务就是编写程序代码并上机调试 B)程序设计的任务就是确定所用数据结构 C)程序设计的任务就是确定所用算法 D)以上三种说法都不完整第二章 :C程序设计的初步知识(11)以下叙述中正确的是( C )。A)C 程序的基本组成单位是语句 B)C 程序中的每一行只能写一条语句二级C 语言程序设计试卷)C)简单C 语句必须以分号结束 D)C 语句必须在一行内写完(11)以下叙述中正确的是( C ) A)C程序中的注释只能出现在程序的开始位置和语句的后面 B)C程序书写格式严格,要求一行内只能写一个语句 C)C程序书写格式自由,一个语句可以写在多行上 D)用C语言编写

3、的程序只能放在一个程序文件中 2.2标识符,常量和变量2.2.1 标识符:定义:由字母,数字和下划线组成,并且第一个字符必须为字母或下划线的。这样的组成就是标识符。注意:在C中大写字母与小字字母被认为是两个不同的字符。分类: 关键字:在C中已经定义好了的,不能用作它用的。如if double int 等等。 预定义标识符:如printf scanf 用户标识符:用户根据自己的需求来定义的。(12)以下选项中,能用作用户标识符的是( C )A)void B)8_8 C)_0_ D)unsigned(11)以下选项中合法的标识符是( C )A) 1-1 B)11 C)-11 D)1(12)以下选项

4、中不合法的标识符是 ( C ) A)print B)FOR C)&a D)_002.2.2常量: 定义:是指在程序的执行的过程中,其值不会被改变的量。 分类:整型常量:没有小数的常量 如:3 9 1234等等都是。 实型常量:有小数点的常量 如:3.9 3.0 3. 字符常量:由单个字符组成的量 如:a b 3 字符串常量:至少由一个字符组成的量 如:“a” “abc” “ beijing” 符号常量:符号常量的值到底是多少,这是由在来定义符号常量时来决定的 (13)以下选项中,能用作数据常量的是 ( D )A)o115 B) 0118 C)1.5e1.5 D) 115L(13)以下选

5、项中不能作为C 语言合法常量的是( A )。A)'cd' B)0.1e+6 C)"a" D)'011'(13)以下选项中不属于字符常量的是 ( B ) A)'C' B)"C" C)'xCC0' D)'072'2.3整型常量与实型常量 整型常量的几个表示方法 十进制数: 八进制数:以0开头的数字,由0-7组成。 下列合法的八进制数是 A,0 B,028 C,-077 D,01.0 十六进制数:以0X开头,由0-9和A-F组成。 A,oxff B,0xabc C,0x11 D,0

6、x19 实型常量 123.4 小数形式:123.4 指数形式:1.234e2 1. 字母e和E之前必须要有数字 2.字母e和E之后的数字必须是整数 3.字母e和数字之间不能有空格。A,2.607E-1 0.8103E 2 -77.77 456E-2 0.1e+6 1.23E1.22.2.4变量: 1.定义:在程序的运行过程中其值可以被改变的量,就叫变量。 2.原则:变量必须先定义后使用。变量定义的过程就是给变量开辟存储单元的过程。 3.分类: 整型变量:用关键字int来表示. short int 短整型 long int 长整型 在内存中占4个字节 如123L unsigned 无符号 如有-

7、200U这就是错的。 变量的定义:int a 这是定义了一个整型变量a. 实型变量:用关键字 double 或float来表示。 float 单精度 在内存中占4个字节 double 双精度 在内存中占8个字节。2.2.5 算术表达式一、基本的算术运算符 + - * / % 这些是双目运算符(就是指操作对象有两个) 注意: 除%外,其它的运算符的运算对象可以是整型也可以是实型。%的操作对象只能是整型。 如10%3=1 10.7%3 10%4.5 x%3=0 + - 也可以做为单目运算。-5.4 +4.9 说明: 1.如果双目运算符两边运算数的类型一致,则所得结果的类型与运算数的类型一致。如 1

8、.0/2.0=0.5 1/2=0 2.如果双目运算符两边运算数的类型不一致,则系统会自动进行类型转换,使两边的类型一致后,再进行运算。 1.0/2=0.5 3.所有的单精度数据,在运算过程中都以双精度进行运算。二、优先级 () + - * / % + - 由高低 如 (5+1)/2=? 2.5.3 强制类型转换表达式 格式:(类型名) (表达式) 例:(int)3.234=3 (double)10%3=?(14)表达式:4-(9)%2的值是( B ) A)0 B)3 C)4 D)5 (14)设变量已正确定义并赋值,以下正确的表达式是 ( C ) A)x=y*5=x+z B)int(15.8%5

9、) C)x=y+z+5,+y D)x=25%5.02.6赋值表达式格式:变量名=表达式注:1.不可以颠倒(左边必须是变量名,右边必须是C语言中合法的表达式) 2.功能就是先求出右边表达式的值,然后把此值赋值给赋值号左边的变量。确切的说是把数据存入以该变量为标识的存储单元中去。a=4 , a=7 3.结合性的优先级仅高于逗号表达式。顺序是自右向左的。如a=2+7/3 4."="是一个赋值号,不是一个等号。 5.x=y。变量的值也是可以传递和赋值的。它的意思就是将变量Y中的值赋值到X中去。同样N=N+1也成立 6.赋值运算符的左侧只能是变量,不能是常量或表达式 a+b=c这就是

10、违法的 7。赋值号的右边也可以是一个赋值表达式。如a=b=7+1; 补充;表达式与语句的区别, 表达式后面加一个分号就是语句。 2.6.2复合赋值表达式例: a+=3-a=a+3 同理可得a*=3 /= -= a+=a-=a+a a 的初值是9 a+=a-=18 a+=(a=a-18) a+=(a=-9) a+=a -18(15)若有定义语句:int x=10;,则表达式x-=x+x的值为( B ) A)-20 B)-10 C)0 D)10(14)设有定义:int x=2;,以下表达式中,值不为6的是 ( D )A) x*=x+1 x=x*(x+1) B) x+,2*xC)x*=(1+x) D

11、)2*x,x+=2(17)若变量均已正确定义并赋值,以下合法的C语言赋值语句是 (A)A)x=y=5; B)x=n%2.5; C)x+n=I D)x=5=4+1; 2.7 + 和 的讲解+:自身加1-:自身减1如i=3 i+_I=i+1 i=4单目3+I I+当+在前,先自身加1,然后再干别人让干的事情 。当+在后,先别人让干的事情然后再干 自身加1。int i=3;int a;a=i+; a=3a=+I;a=4 和输出语句3.2输出语句的讲解 一、printf函数的一般调用形式 格式:printf(格式控制,输出项1,输出项2,.); 在printf函数的最后面写上;号就是输出语句。 1,给

12、输出项白提供输出格式说明 格式说明符: 作用:就是使数据按格式说明符的要求进行输出。 组成:由%号和紧跟在其后的格式描述符组成。 int-%d float或double-%f或e% char-%c 2.提供原样输出的文字或字符 在 “ ” 中除了格式说明符之外的内容要全部原样输出。 各个输出项之间要用逗号隔开。 输出项可以是任意合法的常量,变量或表达式。 printf中常用的格式说明 在格式说明符中,每一个格式说明符都必须以%号开头由相应的类型标识字母结束。但在他们之间可以有其它的一个内容:%c :输出一个字符%d:输出一个十进制的数据%o:以八进制格式输出。%X:以十六进制输出%U:无符号十

13、进制输出%f:以带小数点的数字输出%e:以指数形式输出%s:输出一个字符串。%:输出一个%号%4d:输出的数据长度是4个长度,当原来的长度大于4个时会自动突破。小于4个时会填充空格。%x.yf: x代表数制的宽度(包括小数点)。Y代表小数点后面的小数位数。注意事项:1.输出比较自由一些,输出有的各个数之到底是什么,取决于格式说明符之间的内容。2.格式说明符要与输出项一一对应。3.输出语句中还可以有 n r t a4.尽量不要在输出语句中改变输出变量的值。5.输出的数据中如果存在变量,一定要定义过的。输入语句格式: scanf(格式控制,输入项1,输入项2,.);例如:想通过键盘输入3个数分别给

14、变量a,b,c。并且他们分别为整型,浮点型,双精度型。 输入语句为scanf("%d%f%lf",&k,&a,&y);说明: 1.格式说明符与输出语句一样。 2.在格式串中,必须含有与输入项一一对应的格式转换说明符。 3.在VC6.0的环境下,要收输入的DOUBLE型数据的格式说明符一定要用%lf,否则数据不能正确的输入4.由于输入是一个字符流,所以当输入的数据少于输入项时,程序会等待用户输入,直到满足要求。当输入的数据多于输入项时,多余的数据会自动作废。复合语句:多个语句被括起来,当成一条语句来执行。空语句:最后的表示只有一个;程序举例:1。编写一

15、个程序,从键盘上输入两个数字,让后让他们互换一下。#include<stdio.h>main()int a,b;printf("请输入两个数字:");scanf("%2d%3d",&a,&b);printf("qian:%d%d",a,b);int c;c=a,a=b,b=c;printf("后:%d%d",a,b);2。编写程序,对一个double型数据进行四舍五入运算。要求保留两位有效小树。123.4567123'4567*100=12345.6712345.67+0.5=1

16、2346.17(int)(12346.17)=1234612346/100=123.46第四课:C语言的程序结构4-1节、关系运算与逻辑运算一、简介 关系表达式与逻辑表达式的运算结果都会得到一个逻辑值。就是“真”、“假” 在C语言中0表示“假”,非0(无论是负数还是正数都是真,更多时候用1来代替)表示“真”。二、几个简单的关系运算符 < <= > >= = != 注意: 1,由两个字符组成的运算符,中间不能有空格 2,它们都是双目运算符,具有自左至右的结合性。 3,上面的6个运算符中,前4个的优先级要比后2个的优先级要高。先计算,后判断,最后进行赋值运算。三、几个简单的

17、逻辑运算符 && 与 一假则假 | 或 一真则真 ! 非 非假则真,非真则假 4-2、4-3节、 if语句一、定义: 只有两种结果。要么执行这条语句,要么执行那条语句。 if(条件表达式) 上述条件成立执行的句子 else 上述条件不成立执行的句子如: if(成绩>60) 显示及格 else 显示不及格二、分类 1.不含有else的语句 2.含有else语句 if(条件) 语句1; else 语句2; 语句3; 注: 1.没有分号 2.控制的是与if或者else紧临的“一条”语句。4-4节、结合一个例题来给大家分析if的嵌套输入一个学生的成绩,评定他的等级。每十分一个等级

18、if()elseif()elseif()else if(a>=90) printf("a");elseif(a>=80) printf("b");elseif(a>=70) printf("c");elseif(a>=60) printf("d");else printf("e");4-6节、条件表达式 是C语言中唯一的一个三目运算。格式 :表达式1?表达式2:表达式3 当1成立(非零时)时,表达 式的值就是2的值,否则就是3的值。如: 1.1<2?4:5 2.pr

19、intf("%d",x<0?(-1)*+x:x+); (假定X的值为-3) 3.+X>3?(x<3?a:b):b4-7节、switch语句(一)switch(表达式) case 常量表达 式1:语句1case 常量表达 式2:语句2case 常量表达 式3:语句3case 常量表达 式4:语句4case 常量表达 式5:语句5。case 常量表达 式N:语句N4-8节、switch语句(二)switch(A/10) case 10:printf("A"); case 9:printf("A"); case 8;pri

20、ntf("b"); case 7;printf("c"); case 6;printf("d"); default :printf("e"); 第五课:循环结构5-1、5-2节、while 语句一、格式 : while(表达式) 循环体注:1: 2: 3:一条 while(a<3)1 a+=s;2 s=a;31.100 int i=1,sum=0;while(i<101) sum=sum+i+; printf("%d",sum);丛1开始加到哪个数时他们的和将超过1000?int i

21、=1,sum=0;while(sum<1000)sum+=i;999 +42=1041 i+;42 43printf("%d",-i);5-3节、do-while语句do while()格式: do 循环体 while(表达式)1 2 3 5 8 13doa3=a1+a2;a1=a2;a2=a3;while(a3<=1000);1:12:;5-4节、for语句(1)for语句和for语句构成的循环结构一、格式: for(表达式1;表达式2;表达式3) 循环体相当于while语句的 表达式1; while(表达式2) 循环体; 表达式3;k=0for(;k<

22、=10;) printf("*"); k+; int k=0;while(k<10)printf("*");k+;注:1:表达式可以省略,但分号不可以。2:表达式可以是任意有效的C语言表达式课后习题部分,笔记不再提供,请大家看教程。第六课、字符型数据 6-1节、字符型常量格式:a A 要求:1,单引号中的大写字母和小写字母代表不同的字符常量。2.单引号中的空格也是一个字符常量,但不能是两个连续的单引号3字符常量只能用单引号括起来,不能用双引号。 转义字符n代表回车代表一个单引号 ”代表一个双引号注意:1 转义字符常量,如141只代表一个字符2 反斜

23、线后的8进制数可以不用0开头。如1中所讲的141就是一个8进制数。01413 反斜线后的16进制数只可以用x开头,不可以用X开头。字符串常量 格式:由双引号括起来的一串字符。同时也要知道“A”和A是不一样的。“A” A ACSII码A 65 a 97a-A= 326.2节、字符变量格式:char a=s6.3字符的输入和输出Printf和scanf函数输出和输入字符对于字符型数据的格式说明符是%cChar c=a;Printf(“%c”,c);Char a,b,c,d;Scanf(“%c%c%c”,&a, &b, &c);6-3节、程序举例写出26个大写字母和他们的AS

24、CII代码要求每行输出两组数据。#include <stdio.h>Main()Char ch; int I;For(i=0;i<26:i+) Ch=i+65;If(i%2= =0)Printf(“n”);Printf(“c=%c,ASCII=%d”,ch,ch);在上面的程序中有对于字符的输入与输出,在C语言中也有另外的输入输出字符的语句。输入:变量名=getchar()输出:putchar(变量名)第七章 函数7-1节、库函数1.调用C语言标准库函数时要求的include命令行 Include命令行必须以#开头,系统提供的头文件以.h作为文件的后缀,文件名用一对双引号或一

25、对尖括号(需要注意include命令行不是C语句,因此不能在最后加分号)2.标准库函数的调用 函数名(参数表) 如:putchar(ch)(1) 出现在表达式中的 -ch=getchar()(2) 做为单独的语句完成某种操作。-printf(“*”);7.2函数的定义和返回值 由于C语言中的定义的函数不能完成用户所有的要求,所以用户可以为自己定义函数实现相应的功能。7.2.1函数定义的语法 1:格式: 函数返回值的类型名 函数名(类型名 形式参数1,类型名 形式参数2) 说明部分 语句部分 2:函数名和形式参数都是用户命名的标识符。在同一个程序中,函数名必须唯一,形式参数名只要在同一函数中唯一

26、即可,可以与其他函数中的变量同名。 3:C语言规定,不能在函数的内部定义函数。 4:若在函数的首部省略了函数返回值的类型名,则说明该函数的返回值是int类型 5:除了返回值类型为int类型的函数外,函数必须先定义后调用。 6:当没有函数返回值,则必须把函数定义成void类型。例:编写求两个双精度数之和的函数。  double add(double a, double b )double s;s=a+b;return s;7-2节、函数的返回值 函数的值通过return语句返回, return 表达式; 此表达式的值必须与函数首部所说明的类型一致,若类型不一致,则以函数值的类型为准。需

27、要注意的是,无论函数体中有多少个return语句,只能执行一次。 函数体内可以没有return语句,这时也必须定义函数为 viod类型。7-3节、函数的调用7.3.1函数的两种调用方式 格式为: 函数名(实在参数表) 当实参的个数多于一个时,各实参用逗号隔开。实参的个数必须与调用函数中形参的个数相周,类型一一对应匹配。 如没有形参,则形式为 函数名() 注意后面的小括号不能丢。如题: #include<stdio.h> double add(double ,double);main()double m,n,z;scanf(“%lf %lf”,m,n);z=add(m,n)

28、;printf(“%lf”,z);  double add(double a, double b )double s;s=a+b;return s;73.2 函数调用时的语法要求 1.调用函数时,函数名必须与所调用的函数名字完全一致。 2.实参的个数必须与形参的个数一致。 3.C语言中规定,函数必须先定义后使用。 4.C语言中,函数可以直接或间接的自己调用自己。称为递归调用 fac(n)=fac(n-1)*n7-4节、函数的说明 在C语言中凡是未在调用前定义的函数,C编译程序都默认函数的返回值为int 型。对于返回值是其它类型的,若把函数的定义放在调用之后,应该在调用之前对函数进行说

29、明。 说明的格式:类型名 函数名(参数类型1,参数类型2.。)也可以用以下格式类型名 函数名(参数类型1 参数名1,参数类型2 参数名2,)函数说明的位置: 一般为了让程序早点识别出程序中的定义好了的函数,一般将其放在程序的开始部分7-5节、调用函数和被调用函数之间的数据传递 一:三种格式进行传递1 实在参数和形式参数之间进行数据传递2 通过return语句把函数值返回调用函数3 能过全局变量,但这不是一种好的方式,通常不提倡使用。通过一个程序来看一下数据到底是怎样传递的。#include <stdio.h>viod try(int ,int ,int );main()int x=

30、2,y=3,z=0;printf(“(1)x=%d y=%d z=%dn”,x,y,z);try(x,y,z);printf(“(4) x=%d y=%d z=%dn”,x,y,z);void try(int x,int y,int z)printf(“(2) x=%d y=%d z=%dn”,x,y,z);z=x+y;x=x*x;y=y*y;printf(“(3) x=%d y=%d z=%dn”,x,y,z”);屏幕上的结果是:(1) x=2 y=3 z=0(2) x=2 y=3 z=0(3) x=4 y=9 z=5(4) x=2 y=3 z=0再来一个程序#include<stdi

31、o.h>viod swap(int ,int);main()int x=10,y=20;printf(“(1)x=%d y=%dn”,x,y);swap(x,y);printf(“(4)x=%d y=%dn”,x,y);void swap (int a,int b )int t;printf(“(2) a=%d b=%dn”,a,b);t=a;a=b;b=t;printf(“(3)a=%d b=%dn”,a,b); 程序运行结果(1) x=10 y=20(2) a=10 b=20(3) a=20 b=10(4) x=10 y=207.6程序应用举例编写一个函数isprime(i

32、nt a),用来判断自变量a是否为素数。若是素数,函数返回整数1,否则返回0.#include <stdio.h>int isprime(int)main()int x;printf(“enter a integer number:”);scanf(“%d”,&x);if(isprime(x) printf(“%dis prime n”,x);else printf(“%dis not primen”,x);int isprime(int a)int i;for(i=2;i<=a/2;i+) if(a%i=0) return 0; return 1;编写函数myupp

33、er(ch),把ch中的小写字母转换成大写字母作为函数值返回,其他字符不变。主函数中不断输入字符,用字符结束输入,同时不断输出结果。#include <stdio.h>#include<ctype.h>char myupper(char ch)if(ch>=a&&ch<=z) ch=ch-32; return ch;main()char c;while(c=getchar()!=)c=myupper(c);putchar(c);编写函数统计输入字符的个数,用字符结束输入,在主函数中调用此函数,输出统计结果。#include<stdio.

34、h>long countch();main()long n;n=countch();printf(“n=%ldn”,n);long countch()long cn;for(cn=0;getchar()!=;cn+) ;return cn;7-10-7-13节、课后习题 7.1 以下说法中正确的是 CA)C语言程序总是从第一个定义的函数开始执行B)在C语言程序中,要调用的函数必须在main函数中定义C)C语言程序总是从main函数开始执行D)C语言程序中的main函数必须放在程序的开始部分 7.2 以下函数的类型是CA)与参数x的类型相同 B)void类型 C)int类型 D)无法确定f

35、ff(float x)printf("%dn",x*x); 7.3 以下函数调用语句中,含有的实参个数是BA)1 B)2 C)4 D)5func( (exp1,exp2),(exp3,exp4,exp5); 7.4 以下程序的输出结果是CA)11 B)20 C)21 D)31func(inta,int b) int c c=a+b;return c; main() int x=6,y=7,z=8,r; r=func(x-,y+,x+y),z-); printf("%dn",r); 7.5 以下程序的输出结果是AA)-1 B)0 C)1 D)2 main(

36、) int i=2,p; p=f(i,i+1); printf("%d",p); int f(inta,int b) int c; c=a; if(a>b)c=1; else if(a=b)c=0; else c=-1; return(c); 7.6 以下程序的输出结果是DA)0 B)1 C)6 D)无定值 fun( int a, int b, int c) c=a*b; main() int c; fun(2,3,c); printf("%dn",c); 7.7 以下程序的输出结果是AA)5. B)3. C)4. D)8.25 double f(

37、intn) int i; doubles; s=1.0; for(i=1; i<=n; i+) s+=1.0/i; return s; main() int i,m=3; floata=0.0; for(i=0; i<m; i+) a+=f(i); printf("%fn",a)L; 二、填空题7.8 以下程序的输出结果是_12_. unsigned fun6(unsigned num) unsigned k=1; do k*=num%10; num/=10; while(num); return k; main() unsigned n=26; printf(

38、"%dn",fun6(n); 7.9 以下程序的输出结果是_9.0_. double sub(double x,double y,double z) y-=1.0; z=z+x; return z; main() double a=2.5,b=9.0; printf("%fn",sub(b-a,a,a); 7.10 以下程序的输出结果是_4_. fun1(int a,int b) int c; a+=a; b+=b; c=fun2(a,b); return c*c; fun2(int a,int b) int c; c=(a*b)%3; return c

39、; main() int x=11,y=19; printf("%dn",fun1(x,y); 7.11 下面pi函数的功能是,根据以下公式返回满足精度要求的的值.请填空. pi/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+. double pi(double eps) double s=0.0,t=1.0; int n; for(_n=1_;t>eps;n+) s+=t; t=n*t/(2*n+1); return (2.0*_S_); 7.12 以下函数用以求x的y次方.请填空. double fun(double x,

40、int y) int i; double z=1; for(i=1; i_<=y_; i+) z=_z*x_; return z; n7.13 以下程序的功能是计算S= S K!.请填空. long f(int n) K=1 int i; long s; s=_1_; for(i=1; i<=n; i+) s=_s*i_; return s; main() long s; int k,n; scanf("%d",&n); s=_0_; for(k=0; k<=n; k+)s=s+_f(k)_; printf("%ldn",s);

41、 三、程序调试和编程题 7.14 以下fun函数用以判断n是否是素数,fun函数中有逻辑错,请调试改正. fun(int n) int k,yes; for(k=2; k<=n/2; k+) if(n%k=0) return yes= 0; yes=1; return yes; 第八章 : 指针变量8.1变量的地址和指针:在最开始的时候,一直给大家强调变量要先定义,后使用。为什么会这个样子?这是因为,每当我们使用一个变量系统就必须要给他开辟一个存储单元。系统要对它的值进行记录。每时每刻的记录。怎样进行记录呢?系统会自动的开辟一个地方将该变量监督起来,观察和记录它的变化。这个地方多大放什么

42、东西?这都要求我们提前和系统说好。所以就有了变量要先定义在使用说法。其实变量定义的过程就是给他开辟存储空间的过程。那么存储空间又是什么东西呢?计算机种有一个硬件叫内存条,当我们提起这个硬件的时候往往都会说多大的。1G,2G,4G这都是在说他的空间大小。计算机中的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个编号,这个编号就称为内存地址。如同旅馆的房间一样,单人间,双人间等等,每个房间都有自己的编号。内存中的空间是连续的,地址号也是连续的,并且都是用二进制数来表示的。变量在定义的时候先要说明定义的类型。如:int k; double b; char ch;等等如此的定义。这样是在和电

43、脑系统打招呼,我们是2人要一个两人间。目的就是告诉老板你的房间要是两个人的空间。不能定的是2人间,结果来了3个人住;同时也不能定的2人间,结果就你自己来了(对自己来说多花钱了)。 综上所述:变量的定义就是给变量开辟存储空间的过程。int a float baabbbb1012 1013 1014 1015 1016 1017这就是变量定义的时候系统给随机开辟的地址空间。在结合我们在一开始讲的不同类型的变量的大小,其实就是在说变量所占的内存单元的多少。 1012就是整型变量a的首地址,1014就是浮点型变量b 的首地址。当要用到一个变量时,系统就会迅速的找到这个变量。所以在C程序中还有这样的一个

44、变量的存在,就是指针。 指针就是用来存放一个变量在内存中的地址,当要调用这个变量的时候能迅速的找到。用来存放一个变量地址的变量就叫指针变量。 同时大家也要走出一个误区就是:指针变量之所以叫变量,就是因为它里面所存放的变量的地址也不断的变化的。指针是可以移到的。8.2指针变量的定义和指针变量的基类型 一:格式:类型名 *指针变量名1, * 指针变量名2.如 int *pi,*pj; 与之前不一样的地方就是在变量的前面加了一个*。*是一个说明符,用来说明该变量是指针变量。*号省略的话就和普通的变量一样了。又如: int *pi; char * ch; int a; char c;指针的作用都是一样

45、的,都是用来存放地址的,为什么还要分类型的。原因就是指针变量pi只能存放整型变量的地址,指针变量ch只能存放字符变量的地址。如何让一个指针存放一个变量的地址呢?pi=&a; ch=&c;&叫取址符。*叫指针运算符。能过以上的讲解在家一定对指针有了更进一步和了解。我们共同的回顾一下;变量的定义就是给其开辟存储单元的过程。任何一个变量都有自己的存储地址。指针就是用来存放变量地址的。指针也是一个变量。 指针也要一个地址。那,有没有能存放指针变量地址的一个对象呢?用该怎么称呼?有它是专门用来存放指针的地址的。它就是指向指针的指针。int *p ,*s;p=&s;*p就是

46、一个指向指针的指针。它里面只能存放同种数据类型的指针的地址。8.3 给指针变量赋地址值 一个指针变量可以通过不同的方式获得一个确定的地址值,从而指向一个具体的对象。(在以后的课程中,每当一个指针中存放了一个变量的地址的时候,我们就说这个指针指向了这个变量)。int k=1,*q,*p;q=&k;1 q k这时可以说:q指向了变量k;q=&k+1 q=&(k+1) 这是错误的,指针q就是用来存放地址的,前两个例子不是。同时: &必须放在运算对象的左边,而且运算对象的类型必须与指针变量的基类型相同。 2,通过指针变量获得地址值 可以通过赋值运算,把一个指针变量中的地

47、址值赋给另一个指针变量,从而使这两个指针指向同一地址。  int k,*p,*q;q=&k; p=q;也就是说指针变量p和q都指向了变量k.注:当进行赋值运算时,赋值号两边指针变量的基类型必须相同。3.给指针变量赋“空”值; “ 空”:null的代码值为0,当执行了以上和赋值语句后,称P为空指针。null的代码值为0.p=0 p=0;注意: p并不是指向地址为0 的存储单元,而是一个有确定的值“空”。8.4对指针变量的操作 C语言提供了一个称作“间接访问运算符”的单目运算符:“*”当指针变量中存放了一个确切的地址值是,就可以用“间接运算预算符”通过指针来引用该地址的存储单元。 int *p,i=10,j; p=&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论