- 作者:zhaozj
- 发表时间:2020-12-23 11:01
- 来源:未知
文字来源 VC世界--C语言教室
自我存档,也献给和我一样的DElphi程序员
函数指针变量
在C语言中规定,一个函数总是占用一段连续的内存区, 而函数名就是该函数所占内存区的首地址。 函数指针变量定义的一般形式为:类型说明符 (*指针变量名)(); 其中“类型说明符”表示被指函数的返回值的类型。“(* 指针变量名)”表示“*”后面的变量是定义的指针变量。 例如: int (*pf)();表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是整型。下面通过例子来说明用指针形式实现对函数调用的方法。int max(int a,int b){if(a>b)return a;else return b;}main(){int max(int a,int b);int(*pmax)();int x,y,z;pmax=max;printf("input two numbers:/n");scanf("%d%d",&x,&y);z=(*pmax)(x,y);printf("maxmum=%d",z);}
指针型函数
前面我们介绍过,所谓函数类型是指函数返回值的类型。 在C语言中允许一个函数的返回值是一个指针(即地址), 这种返回指针值的函数称为指针型函数。定义指针型函数的一般形式为: 类型说明符 *函数名(形参表) { …… /*函数体*/}
如:int *ap(int x,int y){...... /*函数体*/}
main(){int i;char *day_name(int n); printf("input Day No:/n");scanf("%d",&i);if(i<0) exit(1);printf("Day No:%2d-->%s/n",i,day_name(i));}char *day_name(int n){static char *name[]={ "Illegal day","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};return((n<1||n>7) ? name[0] : name[n]);}
指针数组说明的一般形式为: 类型说明符*数组名[数组长度] 其中类型说明符为指针值所指向的变量的类型。例如: int *pa[3] 表示pa是一个指针数组,它有三个数组元素, 每个元素值都是一个指针,指向整型变量。通常可用一个指针数组来指向一个二维数组。 指针数组中的每个元素被赋予二维数组每一行的首地址, 因此也可理解为指向一个一维数组。图6—6表示了这种关系。int a[3][3]={1,2,3,4,5,6,7,8,9};int *pa[3]={a[0],a[1],a[2]};int *p=a[0];main(){int i;for(i=0;i<3;i++)printf("%d,%d,%d/n",a[i][2-i],*a[i],*(*(a+i)+i));for(i=0;i<3;i++)printf("%d,%d,%d/n",*pa[i],p[i],*(p+i));} 本例程序中,pa是一个指针数组,三个元素分别指向二维数组a的各行。然后用循环语句输出指定的数组元素。其中*a[i]表示i行0列元素值;*(*(a+i)+i)表示i行i列的元素值;*pa[i]表示i行0列元素值;由于p与a[0]相同,故p[i]表示0行i列的值;*(p+i)表示0行i列的值。读者可仔细领会元素值的各种不同的表示方法。 应该注意指针数组和二维数组指针变量的区别。 这两者虽然都可用来表示二维数组,但是其表示方法和意义是不同的。