- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6.2 指针类型6.2.1 指针的概念 什么是指针 保存内存单元地址的变量 为内存中的数据提供了直接访问手段 指针变量的声明 int *p; 声明p 用于保存整型数据的地址 double *q; 声明q 用于保存双精度数据的地址 变量p, q本身各占用4个字节(地址需用的空间) 通过指针的引用与赋值 double x, y; double *q; q = x; /* 取 x 的地址 */ *q = 3.02 /* 等效于 x = 3.02 */ y = *q; /* 等效于 y = x */ 变量的地址 = 所占用单元的首地址 指针类型的表达式 int x; x 的类型是 int * (指向整数的指针) p 的类型是 int ** (指向整数指针的指针) 例6-3: 设计一个函数,用于交换两个变量中的整数 #include stdio.h void swap(int *p, int *q) { int t; t = *p; *p = *q; *q = t; } main( ) { int x, y; scanf( “%d%d”, x, y ); swap( x, y ); printf( “%d %d\n”, x, y ); } 程序分析 作为参数的指针类型变量 参数变量有自己的内存单元(存地址) 参数传递(按值调用) 将变量 x 的地址值传到参数 p 中 用 *p 访问 x 从函数内部修改了主函数的局部变量 分析方法的特点 利用内存单元的图示 表示所有变量的变化(包括指针) 6.2.2 数组与指针运算 数组名 = 数组占用的内存单元的首地址 int arr[ 32 ], x; int *p = arr; /* 将数组首地址保存在 p */ x = *(p + 2); /* 取数组中的第 3 个元素 */ p++; /* 使指针指向第 2 个元素 */ p = p + 5; /* 使指针指向第 7 个元素 */ *p = 308; /* 改变第 7 个元素 */ x = p – arr; /* 得到 6 */ /* 计算两个地址之间有几个整数的空间 */ 例6-4:设计一个函数,用于将字符串中的小写字母改为大写字母 #include stdio.h void toUpper( char p[ ] ) { for( ; *p != ‘\0’; p++ ) if( ‘a’ = *p *p = ‘z’ ) *p = *p – ‘a’ + ‘A’; } main( ) { char *buf = “characters.”; toUpper( buf ); printf( “%s\n”, buf ); } 程序分析 数组与指针 char p[ ] 等价于 char *p p[ i ] 等价于 *( p + i ) 指针代替了下标变量 空间分配 数组:数组大小 * 元素占用空间 数组名 = 首元素地址 (本身无空间) 指针:4个字节保存地址 字符串 以‘\0’结束的字符数组 用首字符地址参加运算(保存在buf 中) 例 6.5 求两个向量之和的函数 double *addVector( double a[ ], double b[ ], int n ) { int i; double *p; p = (double *)malloc( n * sizeof(double) ); for( i=0; p != NULL in; i++ ) p[ i ] = *a++ + *b++; return p; } /* 用指针代替下标变量 */ 动态空间分配 申请存储单元的函数 void *malloc( long size ); 给定所需字节数,取得系统分配的存储单元,返回首地址 如果分配失败,返回空指针 NULL 释放该空间 void free( void *p ); 给定malloc获得的存储单元首地址 存储单元大小的计算 sizeof( 类型 ) sizeof( 变量 ) 6.2.3 指针与字符串 常用字符串处理函数 int strlen( char *s ); 求字符串中字符个数 int strcmp( char *s1, char *s2 ); 按照字母顺序比较, 0 表示相等 char *strcpy( char *dec, char *src ) 字符串从 src 复制到 dec,返回 dec char *strcat( char *dec, char *src ) 将字符串 src 连接到 dec 后面,返回 dec 例6-6:字符串连接函数 char *strcat( char *dec, ch
您可能关注的文档
- C语言程序设计 第二版 作者 钟廷志 李如超 第6章.ppt
- C语言程序设计 第二版 作者 钟廷志 李如超 第7章.ppt
- C语言程序设计 第二版 作者 钟廷志 李如超 第9章.ppt
- C语言程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目 作者 贾宗璞 许合利 c2 基本数据类型、运算符和表达式.ppt
- C语言程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目 作者 贾宗璞 许合利 C3 顺序结构程序设计.ppt
- C语言程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目 作者 贾宗璞 许合利 c4 选择结构程序设计.ppt
- C语言程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目 作者 贾宗璞 许合利 c5 循环结构程序设计.ppt
- C语言程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目 作者 贾宗璞 许合利 c8 编译预处理.ppt
- C语言程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目 作者 贾宗璞 许合利 c9 指针.ppt
- C语言程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目 作者 贾宗璞 许合利 c11 文件.ppt
文档评论(0)