- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 指针 C程序设计中使用指针可以: 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 动态分配内存 得到多于一个的函数返回值 6.1 指针类型和指针变量 6.2 指针和函数 6.1 指针类型和指针变量 6.1.1 地址和指针的概念 6.1.2 指针和变量的定义 6.1.3 指针变量的使用 6.1 指针类型和指针变量 3、直接存取与间接存取 直接存取:直接指出变量名(按变量地址存取变量值) 间接存取:通过指针变量存取。 与*运算符 含义 当指针变量的基类型为指针类型: 指向指针的指针变量 int **p,*s,i=3; s=i; p=s; /*将s指向i,p指向s;*/ 一、指针变量的初始化 一般形式: 数据类型 *指针名=初始地址值; 例:j=*p+1;//p指向的存储单元的内容加一后赋给变量j *p=*p+1;//p所指的存储单元的内容加一后再放入p所指向的存储单元。 6.2 指针和函数 6.2.1 指针变量作函数参数 6.2.2 返回指针值的函数 6.2.3 指向函数的指针变量 6.2.1 指针变量作为函数参数 6.2.2 返回指针的函数 (返回值为某指针类型的函数) 函数定义形式: 类型标识符 *函数名(参数表); 例 int *f(int x, int y) { …… } 6.2.3 指向函数的指针变量 函数在编译时被分配的入口地址(程序段的存储地址) 称为函数指针, 用函数名表示。我们将这一地址存到一个指针变量里去,这个变量就是指向函数的指针变量。 用函数指针变量作函数参数 习题p102 8.2, 8.4, 8.12 (46)以下叙述中错误的是 A)C程序必须由一个或一个以上的函数组成. B)函数调用可以作为一个独立的语句存在. C)若函数有返回值,必须通过return语句返回. D)函数形参的值也可以传回给对应的实参. max …... 指令1 指令2 函数返回值的数据类型 专门存放函数入口地址 可指向返回值类型相同的不同函数 指向函数的指针变量 定义形式: 数据类型 (*指针变量名)(); 如 int (*p)(); 函数调用形式: c=max(a,b); ? c=(*p)(a,b); 通过函数名调用 函数指针调用 对函数指针变量p?n, p++, p--无意义(p只能指向函数的入口处,不能指向函数中间的某一条指令处) int (*p)() 定义一个指向函数的指针变量,它不是固定指向哪一个函数的,而只是表示专门存放函数入口地址的。在程序中哪一个函数地址赋给它,它就指向哪个函数。即,一个指针变量可以指向不同的函数。 ( )不能省 int (*p)() 与 int *p()不同 函数指针变量赋值:如p=max; p=max(a,b); int maxn(int ); main() { int (*p)(); int m,n; p=maxn; scanf(%d,n); m=(*p)(n); printf(“n=%d, max =%d\n,n,m); } maxn(int n) { int i,x,max; scanf(%d,x); max=x; for(i=1;in;i++) {scanf(%d,x); if(maxx) max=x; } return(max);} 例 编写函数maxn,完成输入n(n10)个整数,找出其中最大数来”的功能。 函数指针变量指向的函数必须有函数说明 E6_3.c 例:用函数指针变量作参数,求最大值、最小值和两数之和 void main() { int a,b,max(int,int), min(int,int),add(int,int); void process(int,int,int (*fun)()); scanf(%d,%d,a,b); process(a,b,max); process(a,b,min); process(a,b,add); } void process(int x,int y,int (*fun)()) { int result; result=(*fun)(x,y); printf(%d\n,result); } max(int x,int y) { printf
文档评论(0)