c语言组织数据2-课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《c语言组织数据2-课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 组织 数据 课件
- 资源描述:
-
1、Programming In CC C程序设计程序设计 -组织数据Programming In C课程组织uC语言入门n 数据n 操作n 过程组织u基本算法n 判断与选择-分支n 迭代与递推-循环n 穷举-流程转向控制n 递归-变量的存储类型u组织数据n 数组n 结构n 指针n 文件Programming In C组织数据-1.数组(处理批量数据)u数组类型;u常用算法:排序、查找、求最大最小值等;u用字符数组存取字符串;u使用字符串处理函数处理字符串u向函数传递一维数组和二维数组;(指针)Programming In C组织数据-2.指针(地址)u指针的概念;n难点:对指针数据类型的理解 u
2、数组的下标法引用和指针法引用;n难点:二维数组的地址和指针概念 u利用字符指针存取字符串;n难点:字符数组和字符指针的区别与联系 u指针数组应用;n难点:指向数组的指针与指针数组的区别 n带参数的main函数;u。Programming In C 一、指针的概念一、指针的概念n变量与地址变量与地址程序中程序中: : int i; float k; 内存中每个字节有一个编号内存中每个字节有一个编号-地址地址.20002000200120012002200220052005内存020032003ik 编译或函数调用时为其分配内存单元编译或函数调用时为其分配内存单元变量是对程序中数据存储空间的抽象P
3、rogramming In C地址Programming In C.200020002004200420062005整型变量整型变量i i10变量变量i_pointer200120012002200220032003n指针与指针变量指针与指针变量 指针:一个变量的地址指针:一个变量的地址 指针变量:专门存放变量地址的变量指针变量:专门存放变量地址的变量2000指针指针指针变量 变量的变量的内容内容 变量的变量的地址地址指针变量指针变量变量变量变量地址变量地址( (指针指针) )变量值变量值指向地址存入指针变量Programming In Cn &与*运算符 含义含义含义: : 取变量的地址取变
4、量的地址单目运算符单目运算符优先级优先级: 2: 2结合性结合性: :自右向左自右向左含义含义: : 取指针所指向变量的内容取指针所指向变量的内容单目运算符单目运算符优先级优先级: 2: 2结合性结合性: :自右向左自右向左 两者关系:互为逆运算 理解.20002000200420042006200620052005整型变量整型变量i10变量变量i_pointer2001200120022002200320032000指针变量指针变量i_pointer-指针变量,它的内容是地址量指针变量,它的内容是地址量*i_pointer-指针的指针的目标变量目标变量,它的内容是数据,它的内容是数据&i_p
5、ointer-指针变量占用内存的地址指针变量占用内存的地址2000200010i_pointer*i_pointer&i_pointeriProgramming In Cn 直接访问与间接访问直接访问与间接访问 直接访问:按变量地址存取变量值直接访问:按变量地址存取变量值 间接访问:通过存放变量地址的变量去访问变量间接访问:通过存放变量地址的变量去访问变量例例 i=3; -直接访问直接访问指针变量指针变量.2000200420062005整型变量整型变量i10变量变量i_pointer20012002200320003例例 *i_pointer=20; -间接访问间接访问20Programmi
6、ng In C指针变量指针变量.20002000200420042006200620052005整型变量整型变量i1010变量变量i_pointer20012001200220022003200320002000整型变量整型变量k例 k=i; -直接访问直接访问 k=*i_pointer; -间接访问间接访问1010例例 k=i; k=*i_pointer; Programming In C指针变量指针变量与其所指向的变量之间的关系n指针变量的定义指针变量的定义 一般形式: 数据类型 *指针名;3变量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri
7、=3;*i_pointer=33变量变量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=3合法标识符合法标识符指针的目标变量的数据类型指针的目标变量的数据类型表示定义指针变量表示定义指针变量不是不是* *运算符运算符例 int *p1,*p2; float *q ; 注意:注意:1 1、intint * *p1, p1, * *p2;p2; 与与 intint * *p1, p2p1, p2; ;2 2、指针变量名是、指针变量名是p1,p2 ,p1,p2 ,不是不是* *p1,p1,* *p2p23 3、指针变量只能指向
8、定义时所规定类型的变量指针变量只能指向定义时所规定类型的变量4 4、指针变量定义后,、指针变量定义后,变量值不确定变量值不确定,应用前必须先赋值,应用前必须先赋值Programming In Cn指针变量的初始化指针变量的初始化一般形式:一般形式: 数据类型数据类型 * *指针名指针名= =初始地址值初始地址值;赋给指针变量,不是赋给目标变量例 int i; int *p=&i;变量必须已说明过类型应一致例 int *p=&i; int i;例 int i; int *p=&i; int *q=p;用已初始化指针变量作初值Programming In C例 main( ) int i=10;
9、int *p; *p=i; printf(“%d”,*p); 危险!危险!例 main( ) int i=10,k; int *p; p=&k; *p=i; printf(“%d”,*p); 指针变量必须指针变量必须先赋值先赋值, ,再使用再使用.2000200420062005整型变量i10指针变量p200120022003随机随机Programming In Cn零指针与空类型指针零指针与空类型指针 零指针:零指针:( (空指针空指针) )定义定义: :指针变量值为零指针变量值为零表示:表示: int * p=0; p指向地址为0的单元,系统保证该单元不作它用表示指针变量值没有意义#def
10、ine NULL 0int *p=NULL:p=NULLp=NULL与未对与未对p p赋值不同赋值不同用途用途: : 避免指针变量的非法引用避免指针变量的非法引用 在程序中常作为在程序中常作为状态状态比较比较 例 int *p; . while(p!=NULL) . void void * *类型指针类型指针表示表示: void : void * *p; p; 使用时要进行使用时要进行强制类型转换强制类型转换例 char *p1; void *p2; p1=(char *)p2; p2=(void *)p1;表示不指定p是指向哪一种类型数据的指针变量Programming In C例例 指针的
11、概念指针的概念main() int a; int *pa=&a; a=10; printf(a:%dn,a); printf(*pa:%dn,*pa); printf(&a:%x(hex)n,&a); printf(pa:%x(hex)n,pa); printf(&pa:%x(hex)n,&pa);运行结果:a:10*pa:10&a:f86(hex)pa:f86(hex)&pa:f88(hex).f86f8af8cf8b整型变量a10指针变量paf87f88f89f86Programming In C例 输入两个数,并使其从大到小输出/*1-0*/main() int *p1,*p2,*p,a
12、,b; scanf(%d,%d,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(a=%d,b=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2);运行结果:a=5,b=9 max=9,min=5.指针变量p1 指针变量p20002008200220042006 指针变量p2 整型变量b 整型变量a5200692008200620082006Programming In C 二、指针与数组n指向数组元素的指针变量例 int array10; int *p; p=&array0; / p=array;或 i
13、nt *p=&array0;或 int *p=array;array0array1array2array3array9.整型指针p&array0p数组名是表示数组首地址的地址常量Programming In Cn指针的运算 指针变量的赋值运算 p=&a; (将变量a地址p) p=array; (将数组array首地址p) p=&arrayi; (将数组元素地址p) p1=p2; (指针变量p2值p1) 不能把一个整数p,也不能把p的值整型变量如 int i, *p; p=1000; () i=p; ()指针变量与其指向的变量具有相同数据类型Programming In C 指针的算术运算: p
14、i p id (i为整型数,d为p指向的变量所占字节数) p+, p-, p+i, p-i, p+=i, p-=i等若p1与p2指向同一数组,p1-p2=两指针间元素个数(p1-p2)/d p1+p2 无意义例 p指向float数,则 p+1 p+1 4例 p指向int型数组,且p=&a0; 则p+1 指向a1例 int a10; int *p=&a2; p+; *p=1;例 int a10; int *p1=&a2; int *p2=&a5; 则:p2-p1=3;a0a1a2a3a4a5a6a7a8a9a数组pp+1,a+1p+i,a+ip+9,a+91Programming In C 指针
15、变量的关系运算若p1和p2指向同一数组,则 p1p2 表示p1指的元素在后 p1=p2 表示p1与p2指向同一元素若p1与p2不指向同一数组,比较无意义 p=NULL或p!=NULLProgramming In Cn 数组元素表示方法数组元素表示方法 int a10,*p=a;a0a1a2a3a9.aa+9a+1a+2地址元素下标法a0a1a2a9a0a1a2a3a9.pp+9p+1p+2地址元素指针法*p*(p+1)*(p+2)*(p+9) 变址运算符ai *(a+i)ai pi *(p+i) *(a+i)*a*(a+1)*(a+2)*(a+9)p0p1p2p9Programming In
16、Ca0a1a2a3a4例 数组元素的引用方法main() int a5,*pa,i; for(i=0;i5;i+) ai=i+1; pa=a; for(i=0;i5;i+) printf(*(pa+%d):%dn,i,*(pa+i); for(i=0;i5;i+) printf(*(a+%d):%dn,i,*(a+i); for(i=0;i5;i+) printf(pa%d:%dn,i,pai); for(i=0;i5;i+) printf(a%d:%dn,i,ai);12345paProgramming In Cmain() int i,*p,a7; p=a; for(i=0;i7;i+)
17、scanf(%d,p+); printf(n); for(i=0;i7;i+,p+) printf(%d,*p);例 注意指针的当前值p=a;pp58762730123456apppppp指针变量可以指到数组后的内存单元Programming In C 一级指针变量与一维数组的关系int *p 与 int q10 数组名是指针(地址)常量 p=q; p+i 是qi的地址 数组元素的表示方法:下标法和指针法, 即若p=q, 则 pi qi *(p+i) *(q+i) 形参数组实质上是指针变量,即int q int *q 在定义指针变量(不是形参)时,不能把int *p 写成int p; 系统只给
18、p分配能保存一个指针值的内存区(一般2字节);而给q分配2*10字节的内存区Programming In C 三、指针与二维数组三、指针与二维数组 二维数组的地址对于一维数组:(1)数组名array表示数组的首地址,即array0的地址;(2)数组名array是地址常量(3)array+i是元素arrayi的地址(4)arrayi *(array+i)arrayint array10;Programming In C对于二维数组:(1)a是数组名, 包含三个元素 a0,a1,a2(2)每个元素ai 又是一个一维 数组,包含4个 元素aa+1a+2*(*(a+0)+1)*(a0+1)int a3
19、4;a0a1a2200020082016200020022008201020162018a00a01a10a11a20a21a02a03a12a13a22a23基类型行指针与列指针a0+1a1+1a2+1*(a+0)+1*(a+1)+1*(a+2)+1Programming In C 对二维数组 int a34,有 a-二维数组的首地址,即第0行的首地址 a+i-第i行的首地址 ai *(a+i)-第i行第0列的元素地址 ai+j *(a+i)+j -第i行第j列的元素地址 *(ai+j) *(*(a+i)+j) aij a+i=&ai=ai=*(a+i) =&ai0, 值相等,含义不同 a+
展开阅读全文