- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
主讲教师:*** 个人主页:*** 教材:《C语言程序设计(C99版)》 陈良银 游洪跃 李旭伟 主编 李志蜀 唐宁九 李 涛 主审 清华大学出版社 2006年9月出版 本书内容 第1章 基础知识 第2章 C语言的基本要素 第3章 变量名、数据类型、运算符和表达式 第4章 C程序基本控制结构 第5章 函数 第6章 数组和指针 第7章 递归 第8章 结构、联合、位运算和枚举类型 第9章 预处理命令 第10章 文件 第11章 高级话题 第12章 C89 Vs C99 实验 (待安排) 本章的节本要求 指针变量是用来存放地址的一种特殊变量。 指针常常用于数组操作,因为指针运算常常比数组下标运算更快。 指针至关重要,原因如下:指针提供了函数修改实参的方法;指针支持动态内存分配;指针可以提高某些程序的效率;指针支持动态数据结构,比如二叉树、链表等。 指针是C语言中最强大也最危险的一个特性。一个无效指针就可能导致整个程序摧毁。更糟糕的是错误使用指针可能导致极难查找的bug。 作为一名C语言的学习者,必须非常清楚地弄明白C语言的指针,否则您就不要对外宣称您学习过C语言。” 6.1 指针和地址 指针变量是存放地址的变量( 通常指针变量占用2字节或4字节存储单元,可能随计算机系统不同而异)。 因此,如果ch是一个char型变量,而p表示一个指向它的指针,我们可以用图6.1来表示这种情况。 通过一元运算符( 取地址运算符,注意与二元运算符区分),可以取出“对象”( 这里的对象指各种类型的变量)的地址,因此语句: p = ch; 将变量ch的地址赋值给指针变量p。 而指针变量p的定义格式如下: int *pi; 如果pi指向一个整型数据x,那么*pi能够出现在任何x能够出现的地方。比如: *pi = *pi + 10; 6.2 指针和函数参数 函数:swap1( )和swap2( ),前者通过一般变量传值,后者通过指针传值。 通过一般变量传值时,传递的是变量的值,而采用指针变量传值时传递的是变量的地址。 例题6.1利用值传递将实参值传递给形参 void Swap1(int x, int y) { int temp; temp = x; x = y; y = temp; } void Swap2(int *pi, int *pj) { int temp; temp = *pi; *pi = *pj; *pj = temp; } 例题6.2 GetDouble( )获取一个浮点型数据并能够返回状态 6.3 指针和数组 任何能够通过数组下标完成的操作也能够通过指针来完成。用指针操作比用数组操作通常更快 。 以下语句: int a[10]; /* 定义数组a */ 就定义了一个有10个整型元素的数组a。数组a存放在一段连续的内存区域中,它由10个元素组成,这些元素的名字分别为:a[0]、a[1]、.......、a[9]。 符号a[i]指数组的第i+1个元素。如果pa是一个指向一个整数的指针,作以下指针变量定义以后: int *pa; /* 定义了一个指针变量 */ 则赋值语句: pa = a[0]; /* 等价于pa = a */ 将让pa指向数组a的第1个元素a[0]。 图6.5 数组的存储空间分配及指针指向数组元素 *(pa+i) 代表的是a[i]的内容,pa+i则是a[i]的地址,而*(pa+i)则是a[i]的内容。 对所有的指针类型来说,算术运算pa+1都指向下一个数组元素,pa+i则指向pa后的第i个数组元素。 例题6.3 通过指针操作连接两个字符串 char *StrCat (register char *dest, register const char *src) { register char *s1 = dest; register const char *s2 = src; register char ch; do { ch = *s1++; } while (ch != \0); s1 -= 2; do { ch = *s2++; *++s1 = ch;
文档评论(0)