第12章指针的高级应用.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章指针的高级应用

C语言程序设计 —提高篇 12.1 指针与函数 正确理解一个函数应从以下几个方面考虑: 函数参数(形参和实参) 代表函数实体的函数名 函数返回值类型 理解函数与指针的关系也要从这几个方面考虑: 指针作为函数的参数 函数的返回值是指针 指向函数的指针。 12.1.1 指针型函数 C语言中允许一个函数的返回值是一个指针(地址),这种返回指针值的函数称为指针型函数。 定义形式 类型说明符 *函数名([参数列表]) 说明: 函数名之前加*号表明这是指针型函数,即返回值是指针。 类型说明符表示了返回的指针值所指向的数据类型。 举例 int *fun(int a, int b) { /* 函数体 */ } 函数fun()是一个指针型函数; 返回值是int*类型。 【例12.1】编写指针型函数找出两个整型数中的最大值。 #include stdio.h int *max(int *x, int *y) { return (*x*y?x:y); /*返回最大数的指针*/ } main() { int a,b,*p; scanf(%d, %d,a,b); p=max(a,b); printf(max=%d, *p); } 12.1.2 指向函数的指针 几点说明: 函数的指令存储在内存中的一段空间中 函数也有相应的内存地址 函数名代表函数的入口地址 函数的入口地址就是函数的指针 函数的指针可以用相应类型的指针变量表示,即指向函数的指针变量 函数也可以用通过指针变量间接调用 定义形式 类型 (*变量名)([参数类型列表]); 说明 “类型”表示指针所指函数的返回值的类型; “(*指针变量名)”表示“*”后面定义的变量是指针变量; 最后的括号表示指针变量所指的是一个函数, 参数类型列表列出函数参数的类型 指向函数的指针变量也称函数指针变量 定义函数指针变量是为了方便对函数的调用。函数指针变量不是固定指向哪一个函数的,在程序中,哪个函数的地址赋予它,它就指向哪个函数。 用函数指针变量调用函数的一般形式为: (*指针变量名)(实参表) 或 指针变量名(实参表) 【例12.2】利用函数指针编程实现:输入三角形的两直角边长,求其面积和斜边长。 main() { int m,n; float s,l; float (*f)(int,int); scanf(%d%d,m,n); f=area; s=(*f)(m,n); f=length; l=(*f)(m,n); length()*/ printf(area=%.2f,length=%.2f\n,s,l); } 说明: (1)与其他指针变量相同,指向函数的指针变量在使用前也必须进行初始化操作,具体形式为“指针变量=函数名”。不要写成“指针变量=函数名(形式参数)”的形式。若带参数,它就不再是一个地址,而是函数调用,返回的是整型数。例如, 指针赋值: f=area; 函数调用: s=area(m,n); (2)函数的调用可以通过函数名调用,也可以通过函数指针调用,只需将(*函数指针变量)代替函数名即可。例如, s=area(m,n); 相当于 s=(*f)(m,n); l=length(m,n); 相当于“l=(*f)(m,n); (3)指向函数的指针变量可以先后指向不同的函数,但这些函数的返回值类型应相同,且与函数指针定义中的类型标识符相同。例如 f=area; 和 f=length; (4)函数指针变量不能进行算术运算,即函数指针的移动是毫无意义的。 12.2 用指针访问二维数组 12.2.1 二维数组元素的地址 设: char a[3][4] = {{‘1’, ‘2’,’ 3’,’ 4’}, { ‘5’, ‘6’,’7’,’ 8’}, {‘9’, ’10’, ’11’, ’12’}}; 它可以这样理解: 数组a有三个元素a[0]、a[1]、a[2] ; 每一个元素代表一行; 每行是一个包含4个元素的一维数组。 12.2.2 指向二维数组元素的指针 这种方法相当于把二维数组转化为一维数组来使用。当用一个指针变量指向第1行的首地址后,即可有哪些信誉好的足球投注网站到全部元素。 设二维数组的大小为m*n, 则第i, j个元素相对于a[0][0]的个数为i ? n + j (i

文档评论(0)

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

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

1亿VIP精品文档

相关文档