例写一个函数,求两个int型变量中居于较大值的变量的地址 maino i int a=2, b=3 main 2000 变量a Int - p, 2 p=f3(a,b) 2002 变量b 3 printf("%dn","p) 2004 200A 指针变量p 2006 int*f3(int x, int y) return &x return &y 不能返回形参或局部变量 的地址,思考为什么?
例 写一个函数,求两个int型变量中居于较大值的变量的地址 不能返回形参或局部变量 的地址,思考为什么? …... …... 2000 2008 200A 2002 2004 2006 2 变量a 变量b (main) 3 指针变量p 200A** int *f3(int x,int y) { if(x>y) return &x; else return &y; } main() { int a=2,b=3; int *p; p=f3(a,b); printf("%d\n",*p); }
例86输入a,bc三个数,调用函数func,得到其中最大数的地址 maino int a, b, c, *p printf("nPlease input a, b, c: n scanf("%od, %od, %d\n", &a, &b, &c) p=func(a, b, c) i printf("a=%d, b=%d, c=d*p=%dIn!", a, b, c, *p) int*func(intx,inty,intz)/*返回地址值的函* int maⅹ if(x=y&&x>=z) return( &x) f(y>=x&&y>=z) return( &y) return(&z 找出错误,并指出原因
例8.6 输入a,b,c三个数,调用函数func,得到其中最大数的地址。 int *func(int x,int y,int z) /*返回地址值的函*/ { int max; if(x>=y&&x>=z) return(&x); if(y>=x&&y>=z) return(&y); return(&z); } main() { int a,b,c,*p; printf("\nPlease input a,b,c:\n"); scanf("%d,%d,%d\n",&a,&b,&c); p=func(a,b,c); printf("a=%d,b=%d,c=%d,*p=%d\n",a,b,c,*p); } 找出错误,并指出原因?
8.2.3指向函数的指针 函数在编译时被分配的入口地址(程序段的存储地址) 称为函数指针,用函数名表示。我们将这一地址存到 个指针变量里去,这个变量就是指向函数的指针变量。 ★指向函数的指针变量 令定义形式max数据类(指针变量名)0 如int(*p)O 令 今函数指针变量 ()不能省 函数返nt(*p)与int*pO不同 令函数调用形式 max(a, U5pa-pypasUTHTovE23 数 对函数指糧针露量指的须有函数说明
8.2.3 指向函数的指针 函数在编译时被分配的入口地址(程序段的存储地址) 称为函数指针, 用函数名表示。我们将这一地址存到一 个指针变量里去,这个变量就是指向函数的指针变量。 max …... 指令1 指令2 ❖函数指针变量赋值:如p=max; 函数返回值的数据类型 专门存放函数入口地址 可指向返回值类型相同的不同函数 指向函数的指针变量 ❖定义形式: 数据类型 (*指针变量名)(); 如 int (*p)(); 函数指针变量指向的函数必须有函数说明 ❖函数调用形式: c=max(a,b); c=(*p)(a,b); c=p (a,b); ❖对函数指针变量pn, p++, p--无意义 ( )不能省 int (*p)() 与 int *p()不同
maino 【例8 Int (*k i int po 个整数, 找出 Int mn -maxn scanf(%od", &n) m=(*p)(n) printf( n=%d, max =%dn",n,m) maxn(int n) fint i, x, max scanf("%od", &max) for(i=l; i<n; 1++) Scaner no d",&x) if(max<x max-x return(max)
【例8.7】编写函数maxn,完成“输入n(n<10)个整数, 找出其中最大数来”的功能。 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",&max); for(i=1;i<n;i++) {scanf("%d",&x); if(max<x) max=x; } return(max); }
有关说明 1、注意指向函数的指针变量定义的格式 2、在给一个指向函数的指针变量赋值时,不用带 参数,如:p=max;而不能p=max(ab); 3、只能给指向函数的指针变量赋值同类型的函数。 4、用函数指针变量调用函数时,只需将(*p)代替 函数名即可,实参必须写上(若有参数的话)。 5、指向函数的指针变量可以根据需要指向同类型 的不同函数; 6、注意指向函数的指针变量的操作
有关说明 1、注意指向函数的指针变量定义的格式 2、在给一个指向函数的指针变量赋值时,不用带 参数,如: p=max; 而不能p=max(a,b); 3、只能给指向函数的指针变量赋值同类型的函数。 4、用函数指针变量调用函数时,只需将(*p)代替 函数名即可,实参必须写上(若有参数的话)。 5、指向函数的指针变量可以根据需要指向同类型 的不同函数; 6、注意指向函数的指针变量的操作