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

[教育]第7章 指针.ppt

  1. 1、本文档共80页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[教育]第7章 指针

第7章 指针 内容提要 指针的概念; 难点:对指针数据类型的理解 数组的下标法引用和指针法引用; 难点:二维数组的地址和指针概念 利用字符指针存取字符串; 难点:字符数组和字符指针的区别与联系 指针数组应用; 难点:指向数组的指针与指针数组的区别 带参数的main函数; 动态内存分配函数及其应用; 难点:一维、二维动态数组的实现 动态数据结构(在第8章介绍) 为什么引入指针的概念 指针为函数提供修改变量值的手段 指针为C的动态内存分配系统提供支持 指针为动态数据结构(如例链表、队列、二叉树等)提供支持 指针可以改善某些子程序的效率 指针的故事 “该程序执行了非法操作,即将关闭” 这种错误几乎全是由指针和数组导致的 黑客攻击服务器利用的bug绝大部分都是指针和数组造成的 有些非计算机专业的人,尽量避免使用指针 关于指针的原则 学习原则 一定要学会 其实通常的应用很简单 与使用变量几乎无异 使用原则 永远要清楚每个指针指向了哪里 永远要清楚指针指向的位置是什么 内存(Random Access Memory) 地址(Address) 计算机内的存储部件,所有指令和数据都保存在内存内 速度快,但是掉电即失 可以随机访问 只要指名要访问的内存单元的地址,就可以立即访问到该单元 地址是一个无符号整数,其字长一般与主机相同 内存中的每个字节都有唯一的一个地址 地址按字节编号,按类型分配空间 1.指针(Pointer)的概念 指针也是一种数据类型 指针变量 具有指针类型的变量,专门存放地址数据的变量 变量的指针 变量的地址 变量与地址 直接访问与间接访问 直接访问:按变量地址存取变量值 间接访问:通过存放变量地址的变量去访问变量 如何定义指针变量? 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]; *用来取指针指向变量的内容 int i, *p; p = i; *p = 0; int *p, a[10]; p = a; *p = 0; int *p, a[10]; p = a[0]; *p = 0; int *p, a[10]; p = a[5]; *p = 0; 指针的指向 指针指向非其定义时声明的数据类型,将引起warning void*类型的指针可以指向任意类型的变量 指针在初始化时一般int *p=NULL; NULL表示空指针,即无效指针 但它只是逻辑上无效,并不是真正地无效 如果指针指向一个非你控制的内存空间,并对该空间进行访问,将可能造成危险 指针变量与其它类型变量的对比 指针运算(1/4) 算术运算 int *p, a[10]; p = a; p++; /*p的值增加多少?*/ 指针的加减运算是以其指向的类型的字长为单位的 指针运算(2/4) int *p, *q, a[10]; p = a; q = a[5]; q - p q = p + 3; 指针运算不能乱算 一般只进行指针和整数的加减运算,同类型指针之间的减法运算 其它运算,比如乘法、除法、浮点运算、指针之间的加法等,并无意义,所以也不支持 指针运算(3/4) 关系运算 只有指向同一种数据类型的两个指针才能进行关系运算。 值为1或0 p q p q p == q 指针不与非指针量进行比较,但可与NULL(即0值)进行等或不等的关系运算 判断p是否为空指针 P == NULL p != NULL 指针运算(4/4) 赋值运算 指针在使用前一定要赋值 为指针变量赋的值必须是一个地址 2 指针与函数 指针既然是数据类型,自然可以做函数的参数和返回值的类型 指针做参数的经典例子: 两数的互换 例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; p2 = p; } swap函数的几种错误形式(3/3) 指

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档