1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 指针 6.1 理解内存地址 程序对象的地址 程序在执行中,从内存空间中取得指令和数据。 内存是由许多小的存储单元组成,每个存储单元存储一个字节(8位)的数据。 整个内存空间按字节大小线性编址。 6.2 指针的定义和指针运算 指针变量的定义 指针变量的定义形式是: 目标数据对象类型 * 指针变量名称; 例如: int *pi; //pi是指向整型数据的指针 float *pf; //pf是指向单精度浮点数据的指针 char *pc; //pc是指向字符数据的指针 注意以下定义的区别: int *p, *q; //定义整型指针变量p和q int *p, q; //p表示整型指针,q表示整型变量 6.3 指针与数组 指针和一维数组 定义数组时,编译器会分配一块连续的区域,按数组下标变化顺序编址 数组名可理解为指向数组首地址的指针 例如,有以下定义: int a[5] = {1,2,3,4,5}; int *pi   6.4 指针与字符串 6.5 指针和函数 指针作函数参数 在C语言中,参数传递采用值传递的方式,但这个值可以是普通意义上的值,例如,变量名传递的就是变量的值,也可以是地址值,即指针,例如数组名传递的就是数组的首地址。 6.6 动态内存分配 在程序设计时,大多数情况下,数据是动态的。即在程序运行里,数据项的数量是变化的。为解决此问题,系统为每个C语言程序专门划分出一片区域,作为中动态内存分配的缓冲池,也称这堆(heap)。程序员可以在程序执行过程中,申请任意数量的动态内存,再使用完毕后,释放该内存区域,以利于再次分配。 动态内存分配的关键技术就是指针。在动态内存区域的数据对象,是匿名对象,它没有和具体的变量名关联起来,也就无法使用变量名的方式访问数据,指针成为操纵它的唯一选择。 /* 冒泡排序法 */ void sortStringArray(int size, char * a[]){ int i,j; char *temp; for(i=0; isize-1; i++) for(j=size-1; ji; j--) if( strcmp(a[j],a[j-1]) 0 ) { temp = a[j]; a[j] = a[j-1]; a[j-1] = temp; } } /* 查找某个名字(由p指向),没有找到返回-1,否则返回数组下标值 */ int searchStringAarray(int size, char * a[], char *p){ int i; for(i=0; isize; i++) if(! strcmp(a[i],p)) //库函数strcmp()返回0,查找成功 return i; return -1; } void main(){ char *names[] ={Paul J.Deitel,Martin Kalin,\n Erics S. Roberts,Dennis M. Ritchie}; char *p=Erics S. Roberts; int cur = searchStringAarray(4,names,p); if(cur = 0) printf(%s在名字列表中,下标值为:%d\n,p,cur); else printf(%s:未找到!\n,p); printf(\n排序前:\n); printStringArray(4,names); sortStringArray(4,names); printf(\n排序后:\n); printStringArray(4,names); } 指针作函数返回值 其定义形式为: 类型标识符 *函数名(参数列表) 【例6.17】定义一个函数,输入两个整型指针,返回较大值的指针。 #include stdio.h int *larger(int *x, int *y){ if (*x *y) return (x); else return (y); } void main(){ int a = 100; int b = 200; int *p; p = larger(a, b); printf(larger =%d\n,*p); } 在返回指针值时,注意不能返回被调用函数中的局部变量的地址,这样会产生错误。 【例6.18】函数返回局部变量的指针 #include stdio.h int *larger(int x, int y){ int res; res =xy ? x: y; return (res); } void f

文档评论(0)

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

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

1亿VIP精品文档

相关文档