- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 指 针 本章要点 指针是什么? 铁杆C/C++程序员最挚爱的武器——指针 指针造就了C/C++的高效和强大,很多不可能的任务由指针完成 黑客攻击服务器利用的bug绝大部分都是指针和数组造成的; 不掌握指针就等于没掌握C的精华; 正确使用指针,能使程序简洁高效; 指针的概念比较复杂,使用灵活,初学易出错;要多学多练,多思考!!! 6.1 指针的概念 指针和内存中的地址是紧密相关的; 系统根据程序中定义的变量类型,在编译时在内存中为变量分配一定大小的空间。内存区的每一个字节有一个编号,这就是“地址”。 用户直接引用变量的存取方式称为直接访问方式。还可以采用另一种称为“间接访问”的方式,将变量x的地址存放在另一变量中。 6.1 指针的概念 定义一种特殊的变量,用来存放地址,可以通过下面语句将x的地址存放到pointer中: pointer = x; 这时pointer的值就是1000,即变量x所占单元的起始地址。如下图所示: 6.1 指针的概念 在C语言中,将地址形象化为“指针”,一个变量在内存中的地址称为该变量的“指针”。意思是通过它能找到以它为地址的内存单元。 例如:根据地址1000就能找到变量x的存储单元,从而读取其中的值。 如果有一个变量专门用来存放另一变量的地址,则它称为“指针变量”,上述的pointer就是一个指针变量, 6.2 指针变量 6.2.1 指针变量的定义 6.2.2 指针变量的引用 C语言中对指针变量的引用是通过两个运算符: &--取变量地址运算 * --取指针变量所指向的变量内容的运算 如:int a, b, *p; a = 168; p = a; b = *p; 经过三个赋值运算后,b的值也为168。 p = a; 在指针变量中只能存放地址,因此,将一个整数赋给一个指针变量是不合法的。 6.2.3 指针变量的初始化 把一个指针初始化为给定数据对象的地址或置为0(表示为null值): 对地址变量的初始化是通过表达式实现的,如:pi = t; 指针的初始化还可以在说明指针变量的同时置初值。如:int y, *p = y; 这里是用p对p初始化,而不是对*p初始化。 空指针 指针变量在定义中若不带初始化项,指针变量被初始化为NULL,它的值为0。C中规定,当指针值为零时,指针不指向任何有效数据,此时称该指针为空指针。 当调用一个要返回指针的函数时,常使用返回值为NULL来指示函数调用中某些错误情况的发生。 6.2.4 指针变量的运算 1、取地址和取指针变量所指向的变量内容的运算 &:取变量地址运算符 * :取指针变量所指的变量内容的运算符 指针可出现在表达式中,如:y1 = *p+1; 指针引用也可出现在赋值号左端,如:*p += 1; 等价于(*p)++; 同类指针间可进行复制转化,如: int x, *pi, *pj; pi = x; pj = pi; 6.2.4 指针变量的运算 2. 算术运算 (1) 指针可以执行增量和减量运算 每当指针变量增量时,它将指向其基本类型的下一个元素的地址;每当指针变量减量时,它将指向前一个元素的地址。 如下的程序行: char *s = “How are you!”; while (*s) putchar(*s++); 其运行结果是把s当前所指的字符串打印出来。 注:*s++的后缀++作用于s,而不是*s,即*(s++) 6.2.4 指针变量的运算 分析下面的表达式: *++s 等价于*(++s), 取指针变量s加1后的内容 * --s 等价于*(--s) ,取指针变量s减1后的内容 * s++ 等价于*(s++), 取s的内容后,s再加1 * s-- 等价于*(s--),取s的内容后,s再减1 (*s)-- s所指向的变量内容减1 (*s)++ s所指向的变量内容加1 6.2.4 指针变量的运算 (2) 指针可以加上或减去一个任意整数,这里整数就表示相对由指针所指向的当前位置的位移。 例如, int a[10], *p; p = a; 表明p是指向整型数组a的始址,那么表达式p+n就表示a中第n个元素的地址,即a[n]。 一般说来,指针表达式p+n就表示超过指针p当前所指位置的第n个对象的地址,而p-i是表示低于指针p当前所指位置的第i个对象的地址, 6.2.4 指针变量的运算 (3) 指针在一定条件下可以进行比较。 如果p和q指向同一数组的元素,那么像、、=、= =和!=等关系都可正常进行。如:
您可能关注的文档
最近下载
- 24J331《地沟及盖板》(替代02J331).pdf VIP
- kb第二版资料(英语)030 KB4 Unit8-1.pptx VIP
- 《A-Million-Dreams》合唱谱SATB钢琴伴奏谱.pdf VIP
- 北京现代-悦纳-产品使用说明书-1.4L 两驱 五座手动青春版 -BH7140UMV-悦纳产品使用说明书.pdf VIP
- 医学继续教育管理制度.pdf VIP
- 剑桥国际英语Unit 8 Book 4.ppt VIP
- 护儿周全童享健康—降低新生儿低血糖发生率.pptx VIP
- 智能智能化脑机接口设备考核试卷.docx VIP
- 医院安全消防制度.docx VIP
- 电动叉车充电操作规程.pptx
文档评论(0)