- 1、本文档共51页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息工程学院计算机技术教研室 耿 楠 为什么引入指针的概念? 铁杆C/C++程序员最挚爱的武器:指针; 特色:C/C++的高效、高能主要来自于指针,是C语言优于其它高级语言的一个重要原因 ; 优点:指针操作可以直接进行靠近硬件的操作 缺点:C的指针操作也给它带来了很多不安全的因素 改进: C++:在保留了指针操作的同时又增强了安全性。 JAVA:取消了指针操作,提高了安全性。 这种错误几乎全是由指针和数组导致的 很多黑客都是利用指针和数组造成缓冲区溢出,来实现恶意攻击。 内存:以字节为单位的连续存储空间。 地址:内存中每个字节所对应的惟一的编号。 凡存放在内存中的程序和数据都有一个地址。 10.1 地址和指针 当c程序中定义一个变量时,系统就分配一个带有惟一地址的存储单元来存储这个变量。 若定义如下变量: 10.1 地址和指针 1)存储单元的大小:每个存储单元的大小(占用的字节个数)和存放变量的数据类型有关。 问:存放变量a,b,c的存储单元的大小? 10.1 地址和指针 2)存储单元的地址:变量所占的存储单元的第一个字节就是该变量的地址。 问:存放变量a,b,c的存储单元的地址? 10.1 地址和指针 3)程序对变量读写操作的实质:对变量所在存储空间中的二进制数进行读取或修改。 问:二进制数低位字节和高位字节的存放顺序? 10.1 地址和指针 本章以前引用变量的方式:通过变量名“直接引用”变量。 例如:对变量b进行赋值运算 系统自动将变量名b转换为变量的存储地址(b); 然后将相应的数据放入变量b的存储空间中; 变量的直接引用方式:通过变量名引用数据,由系统自动完成变量名与其存储地址之间的转换。 10.1 地址和指针 本章引用变量的方式:通过变量的指针“间接引用”变量。 类比:想要访问一个朋友,却不知道他的房间号,只知道他的房间号A被写在了房间B里。 朋友的房间:变量 朋友:变量的值 朋友的房间号A:变量的地址 存房间号A的房间:指针变量 10.1 地址和指针 找到朋友的方式: 先访问房间B,找到朋友所在的房间号A; 再去房间A,访问朋友; 变量的间接引用方式: 首先,找到存放变量地址的指针变量; 然后,通过该指针变量的值(地址)来引用变量; 说明:当指针p的值为某个变量的地址时,可以说指针变量p指向该变量。 10.1 地址和指针 10.1 地址和指针 分析一: b是整型变量,用于存放数值; p是指针变量,用于存放其他变量的地址; b:表示变量b的地址; p=b:表示将变量b的地址存放在指针变量p中; 分析二: 也可以理解为指针变量p指向变量b; *p则表示变量p指向的变量,也就是变量b; *p=5 等价于 b=5 10.1 地址和指针 变量的两种引用方式: 直接引用:直接对变量a赋值; 间接引用:对指针p指向的变量赋值; 10.2 指向变量的指针变量(定义) 一般形式: 类型名 *指针变量名; 举例: 注意事项: 变量名前的“*”:是一个类型说明符,用来说明该变量是一个指针变量。“*”并不是变量名的一部分,也不能省略。 类型名:表示指针变量所指向的变量的类型,而且定义后只能指向这种类型的变量。指向不同类型变量的指针参与运算的效果也不同。 10.2 指向变量的指针变量(定义) 初始化:指针变量在定义的时候最好进行初始化; 例如: 注释: 此例定义了两个指向int型变量的指针变量p和q; 变量i的地址i作为p的初值,而非*p的初值; 变量j的地址j作为q的初值,而非*q的初值; 10.2 指向变量的指针变量(引用) 两个重要的运算符: 取地址运算符“”:a表示变量a的地址; 指针运算符“*”:*p表示指针变量p指向的变量; 10.2 指向变量的指针变量(引用) p=a:表示将a的地址a赋给指针变量p,也就是使指针变量p指向a; q=b:表示将b的地址b赋给指针变量q,也就是使指针变量q指向b; 10.2 指向变量的指针变量(引用) int后面的*是说明符:表示定义了两个指针变量p和q; printf语句中的*是运算符:表示指针变量p和q指向的变量; 10.2 指向变量的指针变量(引用) printf语句中的*p:表示指针变量p指向的变量,即:变量a; printf语句中的*q:表示指针变量q指向的变量,即:变量b; 10.2 指向变量的指针变量(引用) 思考:p,p和*p的区别 符号 和 符号* 和*的优先级相同,结合方向从右往左。 若有赋值语句“p=a;”,则: *p等于p:*p = (*p) = a = p; *a等于a:*a = *(a) = *p = a;
文档评论(0)