已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
返回,第8章指针,8.1指针和指针变量,c语言编程教程,8.2指针和函数,8.3指针和数组,8.4指针和字符串,8.5指针数组为命令行参数,8.6程序示例,8.1指针和指针变量, 8.1.1指针的概念1 .存储器和变量地址存储器地址:存储器是用于计算机存储数据的存储器,为了容易将1字节作为存储单元进行存取,以字节为单位赋予唯一的编号,将最初的字节为单位的编号设为0,以后,各单位按顺序连续赋予编号变量地址:分配给变量的存储器空间的起始字节单位的地址(字节单位编号)。下一页、第8章指针、上一页、2 .变量三个要素:名称、类型和值与变量名称对应的存储单元连接,哪个单元被分配给变量,c编译系统完成从变量名称向对应存储单元的地址转换。 变量分配存储区的大小由类型决定。 变量的值指定对应存储单元的内容。 3 .存储器访问方式直接访问:通过变量名或地址直接访问变量值的方式称为“直接访问”方式。 间接存取:定义特殊变数来储存记忆体或变数的位址,并根据其值来存取适当的记忆体储存格。 此外,在下一页、第8章指针、上一页、系统分配给特殊变量p (用于保存地址)的存储区域地址为4800,在p中保存有变量a的地址即4000。 当读取a变量的值123-45时,不是直接通过a变量,而是首先从变量p得到p的值4000,即,a的地址。从地址4000得到它指示的单元格的值123-45,而不是直接从存储器单元格的地址4000得到值从变量p间接获得变量a的地址,从而间接访问变量a的值的方法是“间接访问”。 一般来说,变量p指的是变量a,变量a表示的是变量p所指的对象,下一页、第8章指针、上一页、4 .指针的概念,在c语言中,用一个变量指向另一个变量的指针来表示。 指针是地址。 变量的指针是该变量的地址,例如4000是指向变量a的指针。 指针变量:保存地址的变量,例如p是指针变量,保存a的地址4000。 下页,第8章指针,上页,8.1.2指针变量的定义和初始化1 .指针变量的定义类型标识符*指针变量名称;指针变量的定义,*是指示后续变量是指针变量的指定符。 例如,p是指针变量, *p 不是指针变量。 定义指针变量时指定的数据类型不是指针变量本身(变量存储的值)的数据类型,而是指针变量指定的对象(或目标)的数据类型指针变量指定的变量的地址值,与此相对,通常变量存储的是, 该变量本身的值指针变量可以指相同类型的不同变量,而不是指某个变量,下一页,第8章指针,上一页,例如float*p1; (p1定义为指向实数型变量的指针变量) char*p2; (定义p2是字符型变量的指针变量),(1)指针运算符地址运算符和有关指针参照的2个运算符:语句只定义了指针变量p,但指针变量没有指定特定的变量(或存储单元)。 这些指针变量由于没有被赋予确定的地址值,因此在某个特定的变量的地址被赋予指针变量后,指针变量指向确定的变量(存储单元)。 指针变量初始化部:在定义指针同时,表示inta、*p=、下一页、第8章指针、上一页、(3)指针变量的引用、*指针变量名指定的变量的值。 指针变量名表示指定变量的地址。 有定义: inta,*p=注意: *和浮点*p=; 第一行定义了整数变量a、b和指针变量pa、pb。由于尚未分配pa、pb,所以pa、pb没有指向变量,下一句完成对pa、pb的分配: pa=,下一页,第8章指针,上一页,例如intj、k; int*pointer1、*pointer2; pointer1=,下一页,第8章指针,上一页,(2)相同类型的指针变量之间的代入,pa和pb都是整数指针变量,它们之间可以相互代入,如pb=pa,即pa、pb指向变量a,此时a、*pa、*pb 请注意,只有相同类型的指针变量可以相互指定指针方向的变化,例如pf=pa。 pa是整数指针,pf是浮点型指针。下页、第8章指针、上页、(3)为指针变量指定null值,为指针变量指定null值,表示指针未指向变量。 NULL指针值表示为NULL,NULL是头文件stdio.h中的预定义常量,值为0,使用时必须添加预定义行。 例如#includestdio.hint*pa=NULL; 也可以在以下语句中将“空”: pa=0指定给指针,或者在: pa=注意:指针pa不是0地址单元格,而是指示pa不指向变量的“空值”。 注:您可以为指针分配0,但不能为指针分配其他常量地址。 例如,pa=4000; 违法。下页、第8章指针、上页、例8.1指针的定义和初始化、main()inta,b; int*pointer_1、*pointer_2; a=100; b=10; 从pointer_1=、下一页、第8章指针、上一页、程序执行结果: 100、10100、10、下一页、第8章指针、上一页、例8.2键盘将两个整数输入到a、b中,按照大小的顺序进行输出。#includemain()inta,b,*pa=/*pa指数,pb指小数*/,下一页,第8章指针,上一页,输入: 1222; 输出结果:a=12,b=22max=22,min=12,(b)(c )指针变化图像,下一页,第8章指针,上一页,2 .指针的算术运算,(1)加减法运算部:个指针可以加上整数n、减法运算,结果,与指针指向的对象的数据类型相关加减运算常用于数组的处理。 指向一般数据的指针对加减运算没有意义。 例如卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡653 57348; x=p3; 将p 3*2字节赋予x,其中x指向阵列的第三组件*。 指针变量“加”或“减”的整数n移动的字节数根据基本类型而不同。 例如,蚊子; floata10、*p=a、*x; 57348; p=p3; /*实际上,p加上3*4字节并给予x,x是排列的第三个组件*/卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡6,例如卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡653 埃; x=p/* x第一个元素组件,p是第二个元素*/卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡此外,在定义了下一页、第8章指针、上一页、inta、*p的情况下,将执行“p=a=22”的p=变量a的地址设为4000,将指针p的地址设为4100,将二次指针pp的地址设为4800。 a、p、pp的关系如上图所示。 此外,pp(4800)p(4100)a(4000 )、第8章指针、上一页、返回、8.2指针和函数,8.2.1指针可以使用指针作为函数参数使用指针,使得可以在函数之间传输多个数据,并且如果波形参数是指针变量,则其相应的实体参数函数形式参数是指针变量,将指针变量或变量地址作为实际参数例8.3,记述交换两个变量的函数,通过主程序调用,实现两个变量值的交换。下页、第8章指针、上页、#includemain()inta,b; int*pa、*pb; voidswap(int*p1,int*p2) /*函数宣言*/,scanf(%d%d ),或者swap (,2222222222222222222222222222卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡卡p=p1; p1=p2; p2=p; 57348; 请不要这样完成处理。57348; (2)用函数交换值时,不能将没有初始值的指针变量作为临时变量使用。 例如int*p; *p=*p1; *p1=*p2; *p2=*p; e; p没有固定值,可能会导致使用p的意外结果。下一页、第8章指针、上一页、两点说明、8.2.2指针函数、指针函数:是返回值为指针的函数指针函数的定义形式:类型显示符*函数名(参数)例: int*fun(inta,intb)返回函数体语句函数体的指针函数、下一页、第8章指针、上一页、例8.3次程序、main()inta,b,*p; 指向int*max(intx,inty) scanf(“%d,%d,%d”),int*max(intx,inty)ifxy)return(,下一页,第8章指针,上一页,8.2.3函数的指针。 某个函数含有一系列的指令,存储在某个存储器中。 存储空间的起始地址称为函数的入口地址,并且这些入口地址称为函数的指针。 函数名称表示函数的条目地址,可以定义一个指针变量,其值等于函数的条目地址,然后使用该指针变量调用函数。 这种指针变量称为指向函数的指针变量。 为函数定义指针变量的典型格式是类型标识符(*指针变量名称)()示例: int (* p ) ()/*指针变量p可以指整数函数*/float (* q ) ()/*指针变量q可以是浮点函数*/下一页、第8章指针、上一页和定义的指针变量将函数的条目地址指定给函数的指针变量后,可以调用该指针变量并为函数指针指定初始值。 将函数名称(函数的入口地址值)指定给指针变量,例如intm,(*p ) ()。 intmax(inta,intb) p=max; /*p指针函数max()*/指针调用函数的一般形式为: (*指针变量)(实际参照表)上述示例: m=(* p ) (12,22 )/*比较m=max(12, 22) */、下页、第8章指针、上页、函数指针调用函数是间接调用,没有参数类型的说明,c编译系统也无法进行类型检查,因此以此形式调用函数时需特别注意。 实际参数必须与指针指向的函数的形状参数类型相匹配。 函数指针可以用作函数参数,在此情况下,每当函数指针指向不同函数,就可以执行不同函数以实现不同的功能,使用下一页、第8章指针,上一页,标记,例如,8.4函数max ()来确定一维数组元素的最大值、下一页、第8章指针、上一页、# include stdio.h # define M8 main () floats umf,sump; flota m = 11,2,- 3,4.5,5,69,7,80 ; float(*p )
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 巧手编织课程实施方案
- 合同审查标准化服务模式
- 外墙一体板施工专项方案
- 地方资产处置工作方案范文
- 脚手架安全施工组织设计
- 室外塑胶地坪铺设验收方案
- 城市河道生态清淤与护岸施工方案
- 幼儿园营养膳食管理规范落实研究-基于幼儿园膳食委员会运行记录数据分析研究
- 航天制造施工方案
- 005化学反应速率与限度 模块1 化学反应的速率 寒假衔接讲义
- 2025年深圳市龙岗排水有限公司招聘笔试参考题库含答案解析
- ORACLE-EBS财务全模块操作手册中文版
- 专题03全等模型-手拉手模型(原卷版+解析)
- 城市公共停车场建设施工方案
- 农村集体土地联营联建协议书
- 马克思主义与社会科学方法论课后思考题答案全
- 三年(2022–2024)高考数学真题分类汇编(全国)专题12 概率与统计(理)(原卷版)
- 汽车顾问式销售(配实训工单)第2版 课件 7-4保险业务
- GB/T 43878-2024旋挖钻机截齿
- 基于市场法的非上市银行股权评估全解
- 喷涂厂厂管理制度
评论
0/150
提交评论