版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章指针第七章指针目录§7.1指针的概念§7.2指针变量的定义与引用§7.3指针与数组§7.4指针与函数§7.5小结
§7.1指针的概念指针指针就是内存地址,是一个常量,通过指针可以访问内存中存储的数据。在程序中定义一个变量,操作系统会为该变量分配一块内存空间,这一块内存空间具有地址编号,通过这个地址就可以找到变量的存储位置,进而访问内存中存储的变量的值。
§7.1指针的概念定义一个int类型的变量,示例代码如下:inta=10;相关4个字节变量a的地址
§7.1指针的概念指针变量:用于存储指针的变量。指针和指针变量的区别:指针是一个地址。指针变量是存放地址(指针)的变量。第七章指针目录§7.1指针的概念§7.2指针变量的定义与引用§7.3指针与数组§7.4指针与函数§7.5小结
7.2指针变量的定义与引用指针变量定义格式。基类型*变量名;指针变量定义示例:int*p;指针指向的数据的类型*符号表明变量是一个指针变量指针变量只能接受其他变量的地址作为其值。获取变量地址的语法格式如下。&变量名取地址运算符
7.2指针变量的定义与引用将变量地址赋值给指针变量的方式有两种。0102定义指针变量的同时对其赋值inta;int*p=&a;先定义指针变量,再对其赋值int*p;inta;p=&a;
7.2指针变量的定义与引用变量的地址可以以p%格式输出。inta,b; //定义整型变量int*pA=&a; //定义指针变量pA并赋入变量a的地址int*pB; //定义指针变量pBpB=&b; //将变量b的地址赋给指针变量pBprintf("&a=%p,pA=%p\n",&a,pA); //打印变量a的地址和指针变量pA的值printf("&b=%p,pB=%p\n",&b,pB); //打印变量b的地址和指针变量pB的值
7.2指针变量的定义与引用引用指针变量,就是根据指针变量中存放的地址。访问地址对应的变量,只需在指针变量前加一个“*”。*指针表达式;变量的地址可以以p%格式输出。intnum=100; //这里定义一个整型变量numint*p=# //定义指针变量p并将其指向变量numprintf("*p=%d\n",*p); //通过num地址读取num中的数据,结果为100第七章指针目录§7.1指针的概念§7.2指针变量的定义与引用§7.3指针与数组§7.4指针与函数§7.5小结
7.3指针与数组1.一维数组指针数组在内存中占据一段连续的空间,数组名默认保存了数组在内存中的起始地址,而一维数组的第1个元素与一维数组的起始地址是相同的,因此在定义指向数组的指针时,可以直接将数组名赋值给指针变量,也可以取第1个元素的地址赋值给指针变量。
7.3指针与数组1.一维数组指针定义一个int数组。intarr[5]={3,5,4,7,9};int*p1=arr;//将数组名arr赋值给指针变量p1int*p2=&arr[0];//取第1个元素的地址赋值给指针变量p2定义指向数组arr的指针
7.3指针与数组1.一维数组指针数组指针可以像数组名一样,使用索引取值法对数组中的元素进行访问。p[索引]定义一个int数组。p1[0] //获取数组第1个元素3,相当于arr[0]p1[1] //获取数组第2个元素5,相当于arr[1]
7.3指针与数组1.一维数组指针除了索引,数组指针还可以通过*符号访问数组元素。使用*符号访问数组元素时,有两种方式。移动指针01移动指针,使指针指向要访问的元素,获取指针指向元素的值。p1=p1+2; //将指针加2,使指针指向arr[2]*p1; //通过*运算符获取到arr[2]元素
7.3指针与数组1.一维数组指针除了索引,数组指针还可以通过*符号访问数组元素。使用*符号访问数组元素时,有两种方式。移动指针01移动指针,使指针指向要访问的元素,获取指针指向元素的值。
7.3指针与数组1.一维数组指针除了索引,数组指针还可以通过*符号访问数组元素。使用*符号访问数组元素时,有两种方式。不移动指针02不移动指针,通过数组指针的加减运算访问元素。*(p1+2) //获取元素arr[2]
7.3指针与数组1.一维数组指针除了索引,数组指针还可以通过*符号访问数组元素。使用*符号访问数组元素时,有两种方式。不移动指针02不移动指针,通过数组指针的加减运算访问元素。
7.3指针与数组1.一维数组指针当指针指向数组时,指针与整数加减表示指针向后或向前移动整数个元素,同样指针每自增或自减一次,表示向后或向前移动一个元素。当有两个指针分别指向数组不同元素时,两个指针还可以进行相减运算,运算结果为两个指针之间的数组元素个数。p2-p1运算结果为3
7.3指针与数组二维数组指针二维数组指针定义时必须要指定列数。数组元素类型(*数组指针变量名)[列数];“*数组指针变量名”使用了一个小括号括起来,这样做是因为“[]”的优先级高于“*”。二维数组指针定义示例。intarr[2][3]={{1,2,3},{4,5,6}};int(*p1)[3]=arr; //二维数组名赋值给指针p1int(*p2)[3]=&arr[0][0]; //取第一个元素的地址赋值给p2int(*p3)[3]=arr[0]; //取第一行地址赋值给p3
7.3指针与数组二维数组指针二维数组指针访问数组元素有两种方式。p1[0][0]; //访问第1个元素01通过索引访问02移动指针二维数组中,指针每加1,指针将移动一行。以数组arr为例,若定义了指向数组的指针p,则p初始时指向数组首地址,即数组的第1行元素,若执行p+1,则p将指向数组中的第2行元素。
7.3指针与数组二维数组指针p+1,二维数组指针移动一行。
7.3指针与数组2.指针数组指针数组就是数组中存储的元素都是指针,即数组中存储的是类型相同的指针变量。类型名*数组名[常量表达式];指针数组定义示例。int*parr[5];
7.3指针与数组2.指针数组指针数组的数组名是一个地址,它是指针数组的起始地址。指针数组的数组名也是第一个元素的地址。数组中的元素是地址,即数组名指向的是地址。指针数组的数组名是一个二级指针。
7.3指针与数组2.指针数组使用指针数组处理一组数据。floatarr[10]={88.5,90,76,89.5,94,98,65,77,99.5,68};定义一个指针数组str,将数组arr中的元素取地址赋给str中的元素。float*str[10];//定义一个float类型的指针数组for(i=0;i<10;i++){str[i]=&arr[i];//将arr数组中的元素取地址赋予str数组元素}
7.3指针与数组2.指针数组str数组与arr数组的关系如下图。
7.3指针与数组2.指针数组指针数组str中存储的是数组arr中的数组元素地址,可以通过操作指针数组str对这一组成绩进行排序,而不改变原数组arr。for(i=0;i<10-1;i++){ float*pTm;//定义临时指针用于交换 for(j=0;j<10-1-i;j++){ if(*str[j]<*str[j+1]){ pTm=str[j]; str[j]=str[j+1]; str[j+1]=pTm;}}}
7.3指针与数组2.指针数组指针数组str中存储的是数组arr中的数组元素地址,可以通过操作指针数组str对这一组成绩进行排序,而不改变原数组arr。
7.3指针与数组2.指针数组也可以不交换指针数组str中的指针,而交换指针指向的数据,则原数组arr就会被改变。for(i=0;i<10-1;i++){ floattpm;//定义一个float的类型的临时变量 for(j=0;j<10-1-i;j++){ if(*str[j]<*str[j+1]){//交换指针指向的数据 tpm=*str[j]; *str[j]=*str[j+1]; *str[j+1]=tpm; }}}
7.3指针与数组2.指针数组也可以不交换指针数组str中的指针,而交换指针指向的数据,则原数组arr就会被改变。
7.3指针与数组2.指针数组也可以不交换指针数组str中的指针,而交换指针指向的数据,则原数组arr就会被改变。第七章指针目录§7.1指针的概念§7.2指针变量的定义与引用§7.3指针与数组§7.4指针与函数§7.5小结
7.4指针与函数1.函数指针定义一个函数,函数代码会存储在代码区一块内存空间中,由函数名记录这块内存空间的起始地址。这一段存储函数代码的内存空间也有地址,可以定义一个指针指向存放函数代码的存储空间,这样的指针叫做函数指针。返回值类型(*变量名)(参数列表);*变量名要用小括号括起来
7.4指针与函数1.函数指针函数指针定义示例。intfunc(inta,intb);int(*p)(int,int); //定义一个函数指针变量pp=func;p(3,5); //函数调用(1)函数指针的返回值类型和参数类型应与它所指向的函数原型相同。(2)函数指针不能进行算术运算。
7.4指针与函数2.返回指针值的函数返回指针值的函数的一般定义形式为:数据类型*函数名(参数列表)例如:int*a(int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年甘肃省酒泉市特岗教师招聘笔试备考试题及答案详解
- 2025年陕西省第十二棉纺织厂职工医院医护人员招聘笔试试题及答案详解
- 2025年图们市口腔医院医护人员招聘笔试试题及答案详解
- 2026年四川省201医院医护人员招聘笔试备考题库及答案解析
- 2025年蒲城龙阳仁厚骨伤医院医护人员招聘笔试试题及答案详解
- 2026四川雅安市石棉县人力资源和社会保障局石棉县教育局考核招聘四川省公费师范毕业生12人笔试参考题库及答案详解
- 2026年武汉市青山区第一医院医护人员招聘笔试备考题库及答案解析
- 2025年上海市虹口区乍浦地段医院医护人员招聘笔试试题及答案详解
- 2026年新疆新通集团公司职工医院医护人员招聘考试参考题库附答案详解
- 2025年西安中华医院医护人员招聘笔试试题及答案详解
- 理论联系实际如何理解新时代我国社会主要矛盾的变化?参考答案(一)
- 2026年部编版语文四年级下册全册单元复习课教案(共8个单元)
- 2026广西南宁市青少年活动中心招聘12355青少年服务台工作人员4人考试备考试题及答案解析
- 水利水电工程单元工程施工质量检验表与验收表(SLT631.5-2025)
- 外贸三方货物出口合同范本合同三篇
- 2025年大连市城市建设投资集团有限公司内部招聘备考题库及1套完整答案详解
- 打造成为九段员工内部培训
- GB/T 18276-2017汽车动力性台架试验方法和评价指标
- GB/T 14187-2008包装容器纸桶
- GB/T 1404.2-2008塑料粉状酚醛模塑料第2部分:试样制备和性能测定
- 机械排痰仪课件
评论
0/150
提交评论