- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课件-指针,数组,内存分配,结构体
补充内容 指针的本质 指针是变量 指针的值就是内存单元(变量)的地址 int I = 100; int *pI = I; int **ppI = pI; 指针的类型 “一个int型的指针”,指的是“一个类型为int*的指针”,编译器认为这样的一个指针指向的内存单元为4字节,并将其内容解释成int类型的值 pI++ 等价于pI = pI +1*sizeof(int) 字符型的指针是? int **ppI中ppI的类型是什么? 指针的类型(续) 类型名和*结构形成了新的指针类型,但*是和后面的变量结合 Int* a,b,c和int *a,b,c的写法效果一样,只有a是int型的指针,而b和c仍是int型的变量 指针的类型(续) 判断一个指针是否有效 if(p!=NULL) 如果指针变量是全局变量,则系统会默认将其值设为NULL,但如果指针变量是局部变量,系统不会给它赋初值,程序员必须明显指明其初值,否则会导致不可预测的结果 指针的类型(续) 指针不管是全局还是局部的,都应当在声明它的时候初始化,要么赋予一个有效的地址,要以赋予NULL int *Pint = NULL; pint = 0x1992;(这样做的结果是什么??) 指针的运算 int *p1,*p2; p++;p--; P+=5;p-=5; P2-p1; P2=p1; ,,=,=,!=,== (取址),*(取值) main() { int*p1,*p2,*p,a,B; scanf(%D,%D,a,B); p1=a;p2=B; if(a<B) {p=p1;p1=p2;p2=p;} printf(\na=%D,B=%D\n\n,a,B); printf(max=%D,min=%D\n,*p1,*p2); } Swap(int *p1,int *p2) {int temp; temp=*p1; *p1=*p2; *p2=temp; } main() { int a,B; int*pointer-1,*pointer-2; scanf(%D,%D,a,B); pointer-1=a;pointer-2=B; if(a<B) Swap(pointer-1,pointer-2); printf(\n%D,%D\n,a,B); } 习题 要求使用指针和子函数完成以下程序: 输入a、B、C 3个整数,按大小顺序输出。 指针的传递 可以将函数的指针或返回值声明为指针,此时,函数接受的参数或返回值是内存单元的地址而不是内存单元的值 数组的本质 任何数组,不论是静态声明还是动态创建的,其所有元素在内存中都是连续字节存放的 数组的本质(续) 数组下标从0开始,到元素个数减1为止,下标必须是整数或整数表达式,在引用数组元素时,编译器通过下标值来计算所引用元素在内存中的地址。 a[3]=100 以上图为例,计算出a+3*sizeof(int) 得到0x004284FC,将原来的45改写为100 数组的本质(续) 数组名本身就是一个指针,数组名的值就是数组第一个元素的内存单元首地址,即:a==a[0],这样,可以通过同类指针迭代来遍历整个数组(如int *p=a;) 数组的本质(续) 另一方面,不能通过数组名来访问整个数组,除非它是带有\0结束符的字符数组(即字符串),由于这个原因,任何两个数组之间不能直接赋值 int a[10]= {0,1} int b[10]= {0,1,2,3,4,5,6,7,8,9} a=b;//错误 数组的本质(续) 想将一个数组的值赋给另一个数组,必须按元素逐个赋值,或者使用内存拷贝函数memcpy() 数组的初始化 指定数组的元素个数 int a[10]; 不指定数组的元素个数,而直接初始化 int a[]={1,2,3,4,5,6}; (等价于:int a[6];a[0]=1;a[1]=2;…) 数组的初始化 同时指定元素个数并初始化 int a[6]={1,2,3,4,5,6}; int a[100]={1}; 常见错误 int a[5]={1,2,3,4,5,6}; int a[10]={5,,12,2}; 注意防止越界 系统不会对数组的边界进行检测,防止越界是程序员个人的事 二维数组 二维数组在C语言中以“行序优先”来存储元素,即在存储时,先存储一行,再存第二行。 int a[5][3],当我们访问a[4][1]时,实际上编译器是*((a+4*3)+1),在定义二维数组
您可能关注的文档
最近下载
- 22S702:室外排水设施设计与施工——钢筋混凝土化粪池.pdf VIP
- 人教版小学数学六年级上册重点题型专项练习(必刷)word版.docx
- 广东省中山市2022-2023学年九年级上学期第一阶段十校联考英语试卷(含答案).docx VIP
- 423编号七年级数学《代数式》习题(含答案).pdf VIP
- 译林版三年级上册英语Unit 4《This is my friend》全单元教学课件(新教材).pptx
- 中学班会 课堂教学《寝室管理的要求》课件(共18张PPT).pptx VIP
- 物理学与人工智能.ppt
- 手机塑胶件来料检验标准手册.pdf VIP
- 公安基础知识1000题.docx
- 翻修屋顶合同5篇.docx VIP
文档评论(0)