网站大量收购独家精品文档,联系QQ:2885784924

第7章指针重点.ppt

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 指针 内容提要 指针的概念; 难点:对指针数据类型的理解 用指针做函数参数; 利用字符指针存取字符串; 字符数组和字符指针的区别与联系 指针数组应用; 指向数组的指针与指针数组的区别 带参数的main函数; 动态内存分配函数及其应用; 一维、二维动态数组的实现 为什么引入指针的概念 铁杆C/C++程序员最挚爱的武器:指针 C/C++的高效、高能主要来自于指针 很多不可能的任务由指针完成 为什么引入指针的概念 指针 为函数提供修改变量值的手段 为C的动态内存分配系统提供支持 为动态数据结构(如例链表、队列、二叉树等)提供支持 可以改善某些子程序的效率 内存(Random Access Memory) 地址(Address) 计算机内的存储部件,所有指令和数据都保存在内存里 速度快,但是掉电即失 可以随机访问 只要指明要访问的内存单元的地址,就可以立即访问到该单元 地址是一个无符号整数,其字长一般与主机相同 内存中的每个字节都有唯一的一个地址 地址按字节编号,按类型分配空间 寻址方式 如何读写内存中的数据? 通过变量的地址访问变量所在的存储单元 两种寻址方式 直接(寻址)访问 通过变量地址直接存取变量内容 间接(寻址)访问 通过指针变量来间接存取它所指向的变量 指针(Pointer)的概念 指针也是一种数据类型 指针变量 声明为指针类型的变量,专门存放地址数据的变量 如何定义指针变量? 定义指针变量 int *p; 定义了一个指针变量p,简称指针p p是变量,int*是类型 p里保存一个地址。此时这个地址是什么呢(p指向哪呢)? 指针变量初始化 p = a; *p就像普通的变量一样使用,其值是p指向的内存的内容(在上例和a等价,但寻址方式不同) p可以动态(任意)地指向不同内存,从而使*p代表不同的变量 int i,*p; p=i; 与*操作符 用来取变量的地址 int i, *p; p = i; int *p, a[10]; p = a; int *p, a[10]; p = a[0]; int *p, a[10]; p = a[5]; *用来取指针指向地址的内容 *p = 0; 指针变量与其它类型变量的对比 指针的指向 只能指向同一基类型的变量,否则将引起warning float x; int *p = x; TC编译 warning: Suspicious pointer conversion in function main VC编译 warning C4133: = : incompatible types - from float * to int * 指针运算 算术运算 int *p, a[10]; p = a; p++; /*p的值增加多少?*/ 指针的加减运算是以其指向的类型的字节长度为单位的 指针运算 int *p, *q, a[10]; p = a; q = a[5]; q - p q = p + 3; 指针运算不能乱算 一般只进行指针和整数的加减运算,同类型指针之间的减法运算 其它运算,比如乘法、除法、浮点运算、指针之间的加法等,并无意义,所以也不支持 指针运算 关系运算 指向同一种数据类型的两个指针才能进行关系运算 值为1或0 p q p q p == q 不能与非指针类型变量进行比较,但可与NULL(即0值)进行等或不等的关系运算 判断p是否为空指针 P == NULL p != NULL 指针运算 赋值运算 指针在使用前一定要赋值 为指针变量赋的值必须是一个地址 指针与函数 指针既然是数据类型,自然可以做函数参数和返回值的类型 指针做函数参数的经典例子: 两数的互换 例7.1~7.2:编写函数实现两数的互换 void Swap(int x,int y) { int temp; temp = x; x = y; y = temp; } 简单变量作函数参数与指针变量作函数参数的比较 swap函数的几种错误形式(1/3) 参数单向传递 void Swap(int x, int y) { int temp; temp = x; /*x,y为内部变量*/ x = y; y = temp; } swap函数的几种错误形式(2/3) 参数单向传递 void Swap(int *p1, int *p2) { int *p; p = p1; /*p1,p2为内部变量*/ p1 = p2; p2 = p; } swap函数的几种错误形式(3/3) 指针p没有确切地址 void Swap(int *p1, int *p2) {

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档