C语言程序设计2第11章指针.ppt

上传人:max****ui 文档编号:6333416 上传时间:2020-02-23 格式:PPT 页数:25 大小:287.31KB
返回 下载 相关 举报
C语言程序设计2第11章指针.ppt_第1页
第1页 / 共25页
C语言程序设计2第11章指针.ppt_第2页
第2页 / 共25页
C语言程序设计2第11章指针.ppt_第3页
第3页 / 共25页
点击查看更多>>
资源描述
第11章指针 C语言的特色之一 也是其精华所在就是指针 使用指针可以实现以下用其它方法不易实现的操作 对内存中的数据进行处理 而不管这些数据的类型 在函数之间快速地传递数据 直接处理内存地址 这种方法增强了C语言的处理能力 提高了程序的执行效率 尤其是适合系统软件的开发 也极大地增强了程序的灵活性 指针不仅不易理解 而且使用不当会带来严重的错误 可以说 是否掌握指针 是业余爱好者与专业程序员的分水岭 学好指针 关键是理解其概念与操作原理 退出 11 1指针的基本概念11 2指针变量的运算11 3数组指针变量的说明和使用11 4字符串指针变量的说明和使用11 5函数指针变量11 6指针型函数 11 1指针的基本概念 11 1 1了解指针在计算机中 所有的数据都是存放在存储器中的 为了正确地访问这些内存单元 必须为每个内存单元编上号 根据一个内存单元的编号即可准确地找到该内存单元 内存单元的编号也叫做地址 通常也把这个地址称为指针 对于一个内存单元来说 单元的地址即为指针 其中存放的数据才是该单元的内容 通常用一个变量来存放指针 这种变量称为指针变量 因此 一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针 11 1 2指针变量的类型说明对指针变量的类型说明包括三个内容 指针类型说明 即定义变量为一个指针变量 指针变量名 变量值 指针 所指向的变量的数据类型 其一般形式为 类型说明符 变量名 其中 表示这是一个指针变量 变量名即为定义的指针变量名 类型说明符表示本指针变量所指向的变量的数据类型 例如 int p 表示p是一个指针变量 它的值是某个整型变量的地址 或者说p指向一个整型变量 至于p究竟指向哪一个整型变量 应由向p赋予的地址来决定 再如 staticint p p是指向静态整型变量的指针变量 float p p是指向浮点变量的指针变量 char p p是指向字符变量的指针变量 指针变量本身一定是整数 就像房间号一样 类型差别只是所指地址中存放的数据的差别 指针应具有 始终如一 的特点 也就是说 一个指针变量只能指向同类型的变量 不能时而指向一个浮点变量 时而又指向一个字符变量 这就好比商品的标签一样 贴计算机的标签不能贴在化妆品 11 1 3指针变量的赋值指针变量也是变量 所以与普通变量同样 必须在使用前赋值 未经赋值的指针变量不能使用 当然 指针变量的赋值只能赋予地址 而不能赋予其它数据 因为变量的地址是由编译系统分配的 所以用户不知道变量的具体地址 因此 通过与变量之间的关系来确定它的值 引入地址运算 2 赋值语句的方法inta int p p 在赋值语句中 被赋值的指针变量前不能再加 说明符 如写为 p a也是错误的 11 2指针变量的运算 指针变量可以进行某些运算 但其运算的种类是有限的 它只能进行地址 赋值及很少一些算术运算和关系运算 11 2 1指针运算符1取地址运算符 其功能是取变量的地址 是单目运算符 其结合性为自右至左 在前面的许多例子中 我们已经使用了 运算符 如 a b 2取内容运算符 用于表示指针所指的变量 是单目运算符 其结合性为自右至左 如 p1 p2 在 运算符之后跟的变量必须是指针变量 注意 指针运算符 和指针变量说明中的指针说明符 的意义并不相同 在指针变量说明中 是类型说明符 表示其后的变量是指针类型 而表达式中出现的 则是一个运算符用以表示指针变量所指变量的内容 例11 1 见课本 11 2 2指针变量的运算1赋值运算指针变量的赋值运算有以下几种形式 1 指针变量初始化赋值参见上页 2 传递地址把一个变量的地址赋予指向相同数据类型的指针变量 例如 inta pa pa 把整型变量a的地址赋予整型指针变量pa 3 传递指针把一个指针变量的值赋予指向相同类型变量的另一个指针变量 如 inta pa 5 取字符串首地址把字符串的首地址赋予指向字符类型的指针变量 例如 char pc pc Hello 或用初始化赋值的方法写为 char pc Hello 注意 并不是把整个字符串装入指针变量 而是把存放该字符串的字符数组的首地址装入指针变量 6 去函数的入口地址把函数的入口地址赋予指向函数的指针变量 例如 int pf1 pf1 f f1为函数名 2加减算术运算由于指针是整数 所以可加上或减去一个整数n 设pa是指向数组a的指针变量 则以下运算都可以 pa n pa n pa pa pa pa指针变量加或减一个整数n的意义为 把指针指向的当前位置 指向某数组元素 向前或向后移动n个位置 这有点像数据库中的在记录之间移动 数组指针变量向前或向后移动一个位置表示指针变量指向下一个数据元素的首地址 而不是在原地址基础上加1 指针没有移动之前 数组a a1a2a3a4a5a6 指针指针向后移动一个位置 数组a a1a2a3a4a5a6 指针指针变量的加减运算只能对数组指针变量进行 对指向其它类型变量的指针变量作加减运算是毫无意义的 3两指针变量相减运算只能在同一数组的两个指针变量之间进行 两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数 实际上是两个指针值 地址 相减之差再除以该数组元素的长度 字节数 另外 两个指针变量不能进行加法运算 因为没有实际含义 例11 2 见课本 例11 3 见课本 11 3数组指针变量的说明和使用 11 3 1数组的存储方式一个数组在内存中占据连续的内存单元 数组名为此连续内存单元的首地址 一个数组元素也可以占据几个连续的内存单元 取决于数组元素的数据类型 一个数组元素的首地址也是指它所占有的几个内存单元的首地址 11 3 2数组指针变量指向数组的指针变量称为数组指针变量 一个指针变量既可以指向一个数组 也可以指向一个数组元素 可把数组名或第一个元素的地址赋予它 如要使指针变量指向第i号元素可以把i元素的首地址赋予它或把数组名加i赋予它 可以用以下两种方法来访问数组元素 其一为下标法 即用a i 形式访问数组元素 这是较为普通的方法 其二为指针法 即采用 pa i 形式 用间接访问的方法来访问数组元素 例11 4 见课本 例11 5 见课本 例11 6 见课本 11 4字符串指针变量的说明和使用 字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的 只能按对指针变量的赋值不同来区别 对指向字符变量的指针变量应赋予该字符变量的地址 如 charc p 则表示s是一个指向字符串的指针变量 把字符串的首地址赋予s 例11 7 见课本 例11 8 见课本 11 5函数指针变量 如前所说 指针变量可以指向整型变量 字符变量和数组等 下面讲述把指针变量指向函数的用法 这种指向函数的变量叫做函数指针变量 为什么指针可以指向函数呢 这要从函数的存储特性说起 尽管函数并不是一个变量 但是 一个函数总是占用一段连续的内存区 而函数名就是该函数所占内存区的首地址 因此可以把函数的首地址 或称入口地址 赋予一个指针变量 使该指针变量指向该函数 然后通过指针变量就可以找到并调用这个函数 11 5 1函数指针变量的定义函数指针变量定义的一般形式为 类型说明符 指针变量名 其中 类型说明符 表示被指函数返回值的类型 指针变量名 表示 后面的变量是定义的指针变量 最后的空括号 表示指针变量所指的是一个函数 例如 int p 表示p是一个指向函数入口的指针变量 该函数的返回值 函数值 是整型 这里的函数指针变量p并不固定地指向某一具体函数 在程序中把那个函数的地址赋给它 它就指向那个函数 这就是其 变量 属性的特点 当然 函数返回值的类型应与它的类型一致 例11 9 见课本 11 5 2函数指针变量的调用调用函数的一般形式为 指针变量名 实参表 比较如下两种调用形式 c p a b c max a b 形式上只是用 p 替代函数名而已 使用函数指针变量还应注意以下两点 不能对函数指针变量进行算术运算 这与数组指针变量不同 数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素 而函数指针的移动毫无意义 函数调用中 指针变量名 的两边的括号不可少 11 5 3函数指针变量的赋值给函数指针变量赋值时 只需要给出函数名 而无需给出参数 因为赋值只是把函数的入口地址赋给指针变量 并不涉及实参与形参 例如 p max 不能写为 p max a b 11 5 4函数指针变量的无参调用可以使用如下形式来调用无参函数 p 11 6指针型函数 如前所述 函数可以返回整数型 实数型及字符型的值 其实 它也可以返回指针型的值 这种返回指针值的函数称为指针型函数 11 6 1指针型函数的定义定义指针型函数的一般形式为 类型说明符 函数名 形参表 函数体 其中的 表明这是一个指针型函数 即返回值是一个指针 类型说明符表示了返回的指针所指向的数据类型 例11 10 见课本 11 6 2指针型函数必须在主函数中说明要使用一个指针型函数 必须在主函数中对所定义的函数加以说明 参看例11 11 11 6 3局部变量不可返回不能把指针型函数的内部说明的局部变量的地址作为返回值 这是因为局部变量在函数运行结束后被释放 相应的地址也要让出来 可能存放其它数据 例11 11中所使用的就是静态变量 11 6 4一致性指针型函数中return语句的返回值必须与函数的数据类型相一致的指针 11 6 5区别指针型函数与函数指针应特别注意函数指针变量和指针型函数的区别 它们不仅书写形式不同 意义也不相同 以int p 和int p 为例 首先书写形式不同 其次意义不同 int p 是一个变量说明 说明p是一个指向函数入口的指针变量 该函数的返回值是整型量 p 的两边的括号不能少 int p 则不是变量说明而是函数说明 说明p是一个指针型函数 其返回值是一个指向整型量的指针 p两边没有括号 例11 11 见课本
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!